openssl pem_read_rsapublickey和pem_read_rsa_pubkey崩溃了程序

OpenSSL PEM_read_RSAPublicKey and PEM_read_RSA_PUBKEY crashes the program

本文关键字:read pem 崩溃 程序 pubkey rsapublickey openssl rsa      更新时间:2023-10-16

我有一个以

形式的公钥
-----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版本,并且程序不会崩溃,但我确实遇到了错误" no Start Line"。

关于可能导致这一点的任何想法?

RSA* rsa = PEM_read_RSA_PUBKEY(file, nullptr, nullptr, nullptr);

第二个参数不能为null。那是导致您的崩溃。此外,它是一个指针到A分量(双间接)。另请参阅PEM_read_RSA_PUBKEY人页。

也许您应该使用以下内容:

RSA* t = RSA_new();
RSA* rsa = PEM_read_RSA_PUBKEY(file, &t, nullptr, nullptr);

数据可能会畸形,并且可能导致意外的崩溃。如果您提供真实的数据,那么我们通常可以对其进行交叉检查。在没有真实数据的情况下,我们真的不能说。

您可能还需要访问如何使用OpenSSL?它显示了几种RSA输出格式。它还向您展示了如何使用C 管理OpenSSL资源。