Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中从.PEM文件读取RSA密钥到RSA结构_C_Openssl_Rsa_Pem - Fatal编程技术网

在C中从.PEM文件读取RSA密钥到RSA结构

在C中从.PEM文件读取RSA密钥到RSA结构,c,openssl,rsa,pem,C,Openssl,Rsa,Pem,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 -newk

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
哈迪克

在第二个命令中,你给出了密码吗?在任何编辑器中打开由第二个命令创建的密钥-您在haders中看到加密的吗

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

在调用
PEM\u read\u RSAPrivateKey
时,通过回调获取密码

或者,您可以使用以下命令从密钥中删除密码

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

这将要求您提供密码短语-如果您提供了正确的密码短语,您将在
mykey1.pem

中以未加密的形式获得密钥,您会遇到什么错误?也可以在任何编辑器中打开mykey.pem-你看到头中有加密的吗?140528560309920:错误:0607606B:lib(6):func(118):reason(107):p5_crpt2.c:209:140528560309920:错误:06074078:lib(6):func(116):reason(120):evp_pbe.c:200:140528560309920:错误:23077073:lib(35):func(119):reason(115):p12_decre.c:83:140528560309920:error:230075:lib(106):reason(117):p12_decrc:123:140528560309920:error:0907B00D:lib(9):func(123):reason(13):pem_pkey.c:132:finished:Segmentation fault@GregS可能重复-您已链接到当前页面!!!!它会死掉。@user93353:当我单击它时,它是一个不同的页面。是。命令如下:privatekey=PEM\u read\u rsaprovatekey(fp,NULL,NULL,(void*)password);它显示了相同的错误。如果pem密钥使用密码短语加密,则需要删除密码短语或将第3个参数中的密码传递到
pem_read_RSAPrivateKey
,然后我该怎么办?请帮帮我。顺便问一下,密码是3rd param还是4th param?是的,第二个命令创建的密钥是加密的。谢谢。它是通过删除密码短语来工作的。但是,它不是通过提供参数来工作的。(即使我没有提供参数密码短语,它也会在运行时要求提供密码短语。但在相同的错误之后。)感谢user93353。