PEM_read_RSAPrivateKey 函数返回 NULL [英] PEM_read_RSAPrivateKey function returns NULL

查看:142
本文介绍了PEM_read_RSAPrivateKey 函数返回 NULL的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用 openssl 库编写了简单的 RSA 密钥函数.以下是我的代码,我找不到第二个 PEM_read_RSAPrivateKey 函数不起作用的原因.有人可以帮我吗?

I wrote simple RSA key functions using openssl library. Following is my code and I cannot find the reason why 2nd PEM_read_RSAPrivateKey function not works. Could someone can help me?

{
    RSA*    pRSA;
    RSA*    pRET;

    pRSA = RSA_generate_key(1024, 65535, NULL, NULL);
    if ( RSA_check_key(pRSA) != 1 )     return (FALSE);

    FILE*   f;
    char*   pPIN = RAS_PINKEY;

    f = fopen("testPRI.cap", "w");
    PEM_write_RSAPrivateKey(f, pRSA, NULL, NULL, 0, NULL, NULL);
    fclose(f);

    f = fopen("testPRI.cap", "r");
    pRET = PEM_read_RSAPrivateKey(f, &pRSAPRI, NULL, NULL);
    fclose(f);
    // pRET is valid (OK)

    //-----
    f = fopen("testPRI2.cap", "w");
    PEM_write_RSAPrivateKey(f, pRSA, EVP_aes_128_cbc(), NULL, 0, NULL, "mypassword");
    fclose(f);

    f = fopen("testPRI2.cap", "r");
    pRET = PEM_read_RSAPrivateKey(f, &pRSAPRI, NULL, "mypassword");
    fclose(f);
    // pRET is NULL (Why?)
}

testPRI.cap 是

testPRI.cap is

-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDA1uie3e7nQSLS4q/1fj82UXtKI1wpDi+QgaGUbFoYQsXCsk6V
Gwaxq5wSf36ptUz5fbdp4D8+VpZ8WhuuSrbIwtjYeF4uD7tp1xgR56IP//GgN14V
Qv6qjLlIQC4Cf/v0tjnTj/Kuvt5RYasRHvkOaiHekdK3yocUdkLqv51T3wIDAP//
AoGBAINFzneTgugmmx8xNwDQBU+7HyxC5ktI12Gx3/OtBbFxhZhigSi5InOsSVZQ
6EXmlGCaGKjHM1Revac77fu/D9Lh0bf2grxT3tWCSrX/RkcayZPEkE80hxWjYVS5
nyWMktA/3NhZq/whe8+eCorXK+GRMTvq9eOwHnrVnzb5zFc/AkEA84HkyLBtNf0D
b4hDYqrWp5o1ciq5LnXEfNXFvTCYd7FhJIZmhUV792CfjvFHxZ6p5A/g0UOkYYjI
7mdnuBjJpwJBAMq7kU2bCSugmNYfJx3VjV/ypU62M8XOGNVb8F2EFSRszUqEzf4N
4x9EUljNlzzuRKJCUMm0vQAgOkZM2SitewkCQGosBoo+5ny2g1v+R0+mSClvd8j0
xZ41WxbA023mRABDyNyTrfq9XGAh8vNnynDGNFzyATl+tYR0Bf9n+TLPkYsCQBJt
kQmz4lBGgEruzdgHEknL8wyTolZcKyQH6GgYephzMDg3PISVPbtETBR4fHi5TRxg
zYKzHWURUv1Y15IHHtcCQQCJbMhCu4fdHdELdmjZXtcc72s6WrdO0wX12KMkkdbF
ri6nddfPYlONNiePbPudP4ZlF5ZNYxXtaPvHbVGgMV++
-----END RSA PRIVATE KEY-----

和 testPRI2.cap 是

and testPRI2.cap is

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,8794CA8EE0292CBC22A52D0F8DA3F4D9

AqUAJdV8o7h2aFDWu3Xo8/mYt74GZOYr6NNTohV0GrRlhHps4ajdeKpugnC6to15
lbSiJFDkb83p07zs0s0NCaKxZAypZ1r05c6F+E5Rs5ozH+Q/hX6L/kQFmZWSd5Of
4Eo6HcBqB4zr57n7LtYdVTkbu9xqsPDYIeMraAtAKRFaysB73XeVNEszOC/JMnAR
8yM4dgMU+HP1+MBrtsfVPKBf7xKmE3WS/wbGT1FHVs3ANzH5cenThh5Mz6EnvuxW
FVgXS4Paxj6CyNKJabxoSmcbyUC/uANIcAQsD7HUhmu92rcABJw4tCCG0sbTTDyi
ioTkyzCq0vSjjxKbiqtySebb8p0aLkAJSDNmD9H5yqIl56egw3eKvduQHOCC4htW
hvMG0k0IRR0h/HsgliWUEUYRhXArpp5x5W1h9SPAcTLw1PhyCtMqd7xfstTpDaw8
/7nz7g7StZoZWKv4E8C485VAAAmaspoxUsbCOlIusJJVSmzAbfYcV+cvzgOLK6NP
F4y/0spR99VGVPr6TTQY38BBDLEo/70U3eHFBHUmRAS1fI9YGeBS5K9mACF4JHPv
hd9YfoSi8Zc90NJIXsexIQjy7e8edu4ODm2bBAKYodZx6v/xheD0BZqY6OhnZ+88
ad0TANIY7RBDF1QCtdVnThQxIXL0H4jlkQgEjnWX2SGXHM653+X3vJS04oN9+gpm
W2qR6Bnafg/adHBnDv71JCzbaLY0NaxXHJXSHFOX8AkmlXlLEDLLeFF84LN+LR+r
zhQNerFY1+Z8rAwu3q4bskQDL+nQGKeQq+gUumJm3CV1FZqK3OPWAS0VqTCNAJE3
-----END RSA PRIVATE KEY-----

推荐答案

终于,我得到了答案.如果缺少初始化函数调用,某些 openSSL 函数将无法正常工作.启动时需要以下代码

Finally, I got the answer. Some openSSL functions do not works correctly if initialization function call is missing. Following code is needed on startup

OpenSSL_add_all_algorithms();
OpenSSL_add_all_ciphers();
ERR_load_crypto_strings();

这篇关于PEM_read_RSAPrivateKey 函数返回 NULL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆