Dav*_*ong 2 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);
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做时,我没有得到一串零和一个零.相反它打印"42 in binary is *".据我所知,从网上可用的非常有限的例子我已经比较过这个例子,我已经正确地实现了这一点.
任何想法为什么它不起作用?
BN_bn2bin不创建可打印的字符串 - 相反,它创建一个真正的二进制表示(即一个位序列).更具体地说,它创建了数字的大端表示.由于42适合一个字节,因此您得到一个字节0x2a,即ASCII中的"*".
如果你想要0/1表示,你需要迭代所有字节,并自己进行打印(例如使用移位或查找表).