【发布时间】:2019-05-15 04:41:44
【问题描述】:
我目前使用 openSSL 将值从加密字符串转换为我认为的二进制数组。然后我解密这个“数组”(传递给 EVP_DecryptUpdate)。我是这样进行转换的:
BIGNUM *bnEncr = BN_new();
if (0 == BN_hex2bn(&bnEncr, encrypted)) { // from hex to big number
printf("ERROR\n");
}
unsigned int numOfBytesEncr = BN_num_bytes(bnEncr);
unsigned char encrBin[numOfBytesEncr];
if (0 == BN_bn2bin(bnEncr, encrBin)) { // from big number to binary
printf("ERROR\n");
}
然后我将 encrBin 传递给 EVP_DecryptUpdate 和解密工作。
我在我的代码中的很多地方都这样做了,现在想编写我自己的将十六进制转换为二进制数组的 C 函数,然后我可以将其传递给 EVP_DecryptUpdate。我尝试了这一点,并将我的加密十六进制字符串转换为 0 和 1 的数组,但事实证明 EVP_DecryptUpdate 无法使用它。从我在网上可以找到的内容来看,BN_bn2bin“创建了一个真正的二进制表示(即位序列)。更具体地说,它创建了一个数字的大端表示。”所以这不仅仅是一个 0 和 1 的数组,对吧?
有人可以解释我如何在 C 中自己进行十六进制->(真正的)二进制转换,这样我就能得到 EVP_DecryptUpdate 期望的格式吗?这很复杂吗?
【问题讨论】:
-
你基本上是在问这个 SO 问题的答案:How to turn a hex string into an unsigned char array?(除了空格)。
-
@ReinierTorenbeek 我不这么认为 - 我需要将十六进制字符串转换为大端表示的位序列。那会和 unsigned char 数组一样吗?...
标签: c encryption openssl