c - OpenSSL 的 BN_bn2bin 函数出现问题

标签 c binary openssl biginteger

我正在尝试使用 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/

相关文章:

c++ - 从字符串转换后如何返回十六进制值

windows - Qt - Windows 上的 SSL 错误

cryptography - openssl命令行是否做key加强?

c - 如何使用 VC++ 编译器刷新 .C 程序中的标准输入设备?

c - C代码中的异常

java - 如何从接收到的数据中正确提取信息?

python - 通过重复加法进行二进制乘法

c - C中是否可以确定64位数字的具体数字

c - 未解析的外部符号 _sleep 使用 sleep()?

c - Openssl 未知协议(protocol)