OpenSSL私钥读取错误(PEM_read_bio_RSAPrivateKey)

时间:2013-02-13 04:24:28

标签: c++ visual-c++ openssl

我正在尝试通过openSSL和VC ++读取PrivateKey,我收到此错误“OpenSSL error: error:0906D064:lib(9):func(109):reason(100)”..

我的私钥:

-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQCnHVS+q65lvG2xocltTYgPGt9FaysGZTrcOwHedo8tX1dyPrcx
2I8x/cvB9nmfdAkt65aGFAlBZrofbPCr2Mq4wDdvIZ31KSuyMQI4T68ylWNT89Ge
wQF6AOkpY1E2bW+oDXc+MpbtpYXY1rUJAS/Abt5vXi7gwKN9FSJ3mm9bjQIDAQAB
AoGACXuxnmxRpjZOJ0FeE9TNfsXwm5jcRS2jbHHwxjYGI/YAGVyTusFmRtj3Iheh
iTnld3SiAxPJ/qscrsHY2nef8Up60V7RF8bs+sbICnHbdz8ZoKxN9dEFCwJkIl55
dv0GHjox6UgWUUkUAiHCM2EgG5eOOQ8PsuXY8LpPWLvfuyUCQQDbkFG9y/Q/3lmb
CdYfBpsP3qvma+fdgCw9lRXTowhu0rKen/CC3rFkHMeHfSW9GHuR8QbPYdVA6d9H
Y7KxYa7LAkEAwtjTEo/zAVexH/+YgiqL6w89BHlTAmwIEkXpqtAnE86kDDCekYdE
fRIdGK1zHDOUddMAhwoJQjJzy/NJreQ8BwJBAMoJ6U3vKZjD8Ex8Jq5yE6nsyt3D
mZ73XL5mO6l9sjrYY0kX/+dNKIro+KoyfNGef8bxtcSLUALlsnIsybf0HTUCQQCR
DD4cvGJHJpOp4WkTxT6Bjsd6lCKyU9+yUq8/RFNC0HqYxHzWkx7uCFT2sPBXFyK2
j4v9+v+ncs13DzZTJ+tzAkBI6UWHtsn839nrAT32M8PEPF/TuDmqebMhFOaTl4an
W0Jr8w8iGk2gvQS2cXEPNh4XT9AgcTKDQkhui4RgxK4F
-----END RSA PRIVATE KEY-----

我的代码:

#include <openssl/rand.h>
#include <openssl/rsa.h>
#include <openssl/engine.h>
#include <openssl/sha.h>

#include <openssl/hmac.h>
#include <openssl/evp.h>
#include <openssl/bio.h>
#include <openssl/pem.h>
#include <openssl/buffer.h>
#include <openssl/err.h>
#include <openssl/x509.h>


int main(int argc, char** argv)
{
    BIO *mem = NULL; 
    RSA *rsa_private = NULL;
    char *private_key = "-----BEGIN RSA PRIVATE KEY-----\nMIICXQIBAAKBgQCnHVS+q65lvG2xocltTYgPGt9FaysGZTrcOwHedo8tX1dyPrcx2I8x/cvB9nmfdAkt65aGFAlBZrofbPCr2Mq4wDdvIZ31KSuyMQI4T68ylWNT89GewQF6AOkpY1E2bW+oDXc+MpbtpYXY1rUJAS/Abt5vXi7gwKN9FSJ3mm9bjQIDAQABAoGACXuxnmxRpjZOJ0FeE9TNfsXwm5jcRS2jbHHwxjYGI/YAGVyTusFmRtj3IhehiTnld3SiAxPJ/qscrsHY2nef8Up60V7RF8bs+sbICnHbdz8ZoKxN9dEFCwJkIl55dv0GHjox6UgWUUkUAiHCM2EgG5eOOQ8PsuXY8LpPWLvfuyUCQQDbkFG9y/Q/3lmbCdYfBpsP3qvma+fdgCw9lRXTowhu0rKen/CC3rFkHMeHfSW9GHuR8QbPYdVA6d9HY7KxYa7LAkEAwtjTEo/zAVexH/+YgiqL6w89BHlTAmwIEkXpqtAnE86kDDCekYdEfRIdGK1zHDOUddMAhwoJQjJzy/NJreQ8BwJBAMoJ6U3vKZjD8Ex8Jq5yE6nsyt3DmZ73XL5mO6l9sjrYY0kX/+dNKIro+KoyfNGef8bxtcSLUALlsnIsybf0HTUCQQCRDD4cvGJHJpOp4WkTxT6Bjsd6lCKyU9+yUq8/RFNC0HqYxHzWkx7uCFT2sPBXFyK2j4v9+v+ncs13DzZTJ+tzAkBI6UWHtsn839nrAT32M8PEPF/TuDmqebMhFOaTl4anW0Jr8w8iGk2gvQS2cXEPNh4XT9AgcTKDQkhui4RgxK4F\n-----END RSA PRIVATE KEY-----";

    mem = BIO_new_mem_buf(private_key, strlen(private_key));
    if (mem == NULL) 
    { 
        char buffer[120]; 
        ERR_error_string(ERR_get_error(), buffer); 
        fprintf(stderr, "OpenSSL error: %s", buffer);
        exit(0);
    } 

    rsa_private = PEM_read_bio_RSAPrivateKey(mem, NULL, NULL, NULL); 
    BIO_free (mem); 
    if (rsa_private == NULL) 
    { 
        char buffer[120]; 
        ERR_error_string(ERR_get_error(), buffer); 
        fprintf(stderr, "OpenSSL error: %s", buffer);
        exit(0);
    } 

    return(0);

}

我正在使用WinXP-SP2和MS-Visual Studio 2008 .. 我在这一行收到错误:rsa_private = PEM_read_bio_RSAPrivateKey(mem, NULL, NULL, NULL); 错误:(OpenSSL error: error:0906D064:lib(9):func(109):reason(100)

任何人都可以帮助我,我该怎么读这个女贞钥匙????

感谢.....

2 个答案:

答案 0 :(得分:3)

变量private_key被错误地初始化。您需要在私钥中的每一行后添加\n

答案 1 :(得分:1)

对我有用

unsigned char *rsaPrivateKeyChar = (unsigned char *)key.c_str();
// write char array to BIO
BIO *rsaPrivateBIO = BIO_new_mem_buf(rsaPrivateKeyChar, -1);
// create a RSA object from private key char array
RSA *rsaPrivateKey = NULL;
PEM_read_bio_RSAPrivateKey(rsaPrivateBIO, &rsaPrivateKey, NULL, NULL);
return rsaPrivateKey;