【问题标题】:Reading RSA keys from .PEM file to RSA structure in C将 .PEM 文件中的 RSA 密钥读取到 C 中的 RSA 结构
【发布时间】:2025-12-16 06:40:01
【问题描述】:

JKJS

观察:

假设 RSA 私钥是通过以下命令创建的:

openssl genrsa -out mykey.pem 1024

然后,在 C 中从该文件中读取密钥就没有问题了:

RSA *privatekey=NULL;
privatekey=PEM_read_RSAPrivateKey(fp,NULL,NULL,NULL);
if(privatekey==NULL)
ERR_print_errors_fp(stderr);

但是,如果 RSA 密钥对是通过以下命令创建的:

openssl req -newkey rsa:1024 -sha1 -keyout mykey.pem -out rootreq.pem

然后从 mykey.pem 读取会导致错误。 为什么?

JKJS 哈迪克

【问题讨论】:

  • 您遇到什么错误?同时在任何编辑器中打开 mykey.pem - 你在标题中看到 ENCRYPTED 吗?
  • 140528560309920:error:0607606B:lib(6):func(118):reason(107):p5_crpt2.c:209:140528560309920:error:06074078:lib(6):func(116) :reason(120):evp_pbe.c:200: 140528560309920:error:23077073:lib(35):func(119):reason(115):p12_decr.c:83: 140528560309920:error:2306A075:lib(35): func(106):reason(117):p12_decr.c:123: 140528560309920:error:0907B00D:lib(9):func(123):reason(13):pem_pkey.c:132:finished: 分段错误
  • @GregS - 您已链接到当前页面!!!!它会递归到死亡。
  • @user93353:当我点击它时,它是一个不同的页面。

标签: c openssl rsa pem


【解决方案1】:

在第二个命令中,您是否提供了密码?在任何编辑器中打开由第二条命令创建的密钥 - 你在 haders 中看到 ENCRYPTED 了吗?

如果是,那么这就是您无法使用 PEM_read_RSAPrivateKey 读取它的原因,因为您将第三个参数作为 NULL 传递。

在对PEM_read_RSAPrivateKey 的调用中传递回调以获取密码。

您也可以使用以下命令从密钥中删除密码

openssl rsa -in mykey.pem -out mykey1.pem.

这将要求您输入密码 - 如果您提供正确的密码,您将在 mykey1.pem 中以未加密的形式获得密钥

【讨论】:

  • 是的。命令如下:privatekey=PEM_read_RSAPrivateKey(fp,NULL,NULL,(void *)password);显示同样的错误。
  • 如果 pem 密钥使用密码加密,您需要删除密码或将第三个参数中的密码传递给 PEM_read_RSAPrivateKey
  • 那我该怎么办?请帮帮我。顺便说一句,密码是第三个参数还是第四个参数?而且,是的,第二个命令创建的密钥是加密的。
  • 谢谢。它可以通过删除密码来工作。但是,它不能通过提供参数来工作。(即使我没有提供参数密码,它也会在运行时要求输入密码。但是在同样的错误之后。)感谢 user93353。