我使用以下命令创建了一个公钥文件:
openssl genrsa -out mykey.pem 2046
openssl rsa -in mykey.pem -pubout > mykey.pub
然后我从一些 C 代码中读取它:
public_key = PEM_read_RSA_PUBKEY(fp, NULL, NULL, NULL);
然后获取此公钥的 DER 形式:
int len = i2d_RSAPublicKey (public_key, NULL);
buf = (unsigned char *) malloc (len);
i2d_RSAPublicKey (public_key, &buf);
这里 len == 269
但是命令行打开SSL告诉我:
openssl rsa -outform der -pubin -inform pem -in mykey.pub | wc
writing RSA key
1 10 293
当我从openssl和我的C代码打印出DER表单时,它们显然不匹配,奇怪的是,我的C代码获得的DER有很多零。
我可能做错了什么?
我应该使用 i2d_RSA_PUBKEY() 获得 DER 形式。 此外,将 &buf 传递给该方法应该警告我指针正在被修改。 我不知道为什么它会被修改以及它在通话后指向什么。
所以现在我做到了
der_form = throw_away = (unsigned char *) malloc (len);
i2d_RSAPublicKey (public_key, &throw_away);
并使用der_form的内容。