我正在尝试使用 OpenSSL 中的 BN_* 函数。具体来说,我有以下代码:
#import <openssl/bn.h>
BIGNUM * num = BN_new();
BN_set_word(num, 42);
char * buffer = malloc((BN_num_bytes(num)+1) * sizeof(char));
buffer[BN_num_bytes(num)] = '\0';
int len = BN_bn2bin(num, buffer);
printf("42 in binary is %s\n", buffer);
但是,当我这样做时,我没有得到一串 1 和 0。相反,它会打印 “二进制中的 42 是 *”
。据我所知,从我与之比较的网络上可用的非常有限的示例来看,我已经正确实现了这一点。
有什么想法为什么它不起作用吗?
最佳答案
BN_bn2bin
不会创建可打印的字符串 - 相反,它会创建真正二进制的表示形式(即位序列)。更具体地说,它创建数字的大端表示。由于 42 适合一个字节,因此您得到一个字节 0x2a,即 ASCII 中的“*”。
如果您想要 0/1 表示,则需要迭代所有字节,并自己进行打印(例如使用移位或查找表)。
关于c - OpenSSL 的 BN_bn2bin 函数出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1506619/