openssl RSA公钥与C代码的密钥读取不匹配

时间:2014-01-05 18:12:07

标签: c openssl public-key der

我使用以下命令创建了一个公钥文件:

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

但命令行openssl告诉我:

openssl rsa -outform der  -pubin -inform pem -in mykey.pub | wc
writing RSA key
       1      10     293

当我从openssl和我的C代码中打印出DER表单时,显然不匹配,奇怪的是,我的C代码获得的DER有很多零。

我可能做错了什么?

1 个答案:

答案 0 :(得分:2)

我应该使用i2d_RSA_PUBKEY()获得DER表单。此外,传递& buf应该警告我指针正在被修改。我不知道为什么它会被修改以及它在通话后指向的内容。

所以现在我做了

der_form = throw_away = (unsigned char *) malloc (len);
i2d_RSAPublicKey (public_key, &throw_away);

并使用der_form的内容。