【发布时间】:2016-12-11 22:25:04
【问题描述】:
我有一个形式为
的公钥-----BEGIN PUBLIC KEY-----
MIIB...
-----END PUBLIC KEY-----
使用 OpenSSL 创建的。我尝试像这样将它加载到内存中:
FILE* file = fopen("public.pem","r");
if (file != nullptr)
{
//This can be changed to this for the same results:
//RSA* rsa = PEM_read_RSAPublicKey(file, nullptr, nullptr, nullptr);
RSA* rsa = PEM_read_RSA_PUBKEY(file, nullptr, nullptr, nullptr);
//etc...
}
只要到达 RSA* rsa =... 行,程序就会崩溃。我已经看到了其他帖子,并且(如您所见)我已经尝试了解决方案,但它不起作用。
我尝试使用 BIO 版本,程序没有崩溃,但我确实收到错误“无起始行”。
关于什么可能导致这种情况的任何想法?
【问题讨论】:
-
我认为您需要指向将读取数据的有效结构,而不是使用 nullptr。
-
也许不应该给 PEM_read_RSA_PUBKEY 方法
nullptrs? -
我试过:if (!PEM_read_RSA_PUBKEY(file, &rsa, nullptr, nullptr)) (其中 rsa 是使用 RSA_new() 初始化的),但它仍然崩溃。如果您使用密码,最后两个字段只是密码字段。倒数第二个是用于查找密码的回调函数指针,最后一个是指向 char* 的 void*。我的确实有密码,但在最后一个参数中使用 (void*)password 没有帮助。