【问题标题】:openssl RSA public key does not match key read from C codeopenssl RSA 公钥与从 C 代码读取的密钥不匹配
【发布时间】:2014-01-23 02:32:17
【问题描述】:

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

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 有很多零。

我做错了什么?

【问题讨论】:

    标签: c openssl public-key der


    【解决方案1】:

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

    所以我现在做

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

    并使用 der_form 的内容。

    【讨论】:

    • 我花了 2 个小时才找到这篇文章。我不知道为什么传入的指针会被修改,但是这种两个指针的方法有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-31
    • 2013-12-19
    • 1970-01-01
    相关资源
    最近更新 更多