Trouble shooting: Openssl Can’t Load Private Key no start line

事情的起因是这样子的,公司对一些报价数据会做一些加密处理。使用RSA+AES组合的方式对报价文件或者一些敏感文件进行加密。公司同事写了一个周期生成RSA密钥对的服务,并且将RSA的PEM文件以 MYSQL中 HEX(AES)方式存储。

主要的现象是我在用openssl加载RSA私有key的时候出现Can‘t Load Private Key no start line

我是使用QByteArray存储了这个串,然后使用以下的方法组成一个RSA

RSA* sophic_crypto::getPrivateKey(QByteArray &data)
{
    const char* privateKeyStr = data.constData();
    BIO* bio = BIO_new_mem_buf((void*)privateKeyStr, -1);
    BIO_set_flags(bio, BIO_FLAGS_BASE64_NO_NL);
    
    RSA* rsaPrivKey = PEM_read_bio_RSAPrivateKey(bio,NULL, NULL, NULL);
    if(!rsaPrivKey)
    {
        qCritical() << "Could not load private key" << ERR_error_string(ERR_get_error(),NULL);
    }
    
    BIO_free(bio);
    return rsaPrivKey;
}

但是失败了,我还是将从DB中读取出来的字符串输出到文件中才发现了问题。

多了一个 ’ 字符

去掉了之后成功加载了私钥。

拓展:PKCS1 月PKCS8标准格式

1、PKCS1

-----BEGIN RSA PRIVATE KEY-----
中间为密钥内容
-----END RSA PRIVATE KEY-----

2、PKCS8

-----BEGIN PRIVATE KEY-----
中间为密钥内容
-----END PRIVATE KEY-----

作者: tingjeremypriv

无法自制的人得不到自由

发表评论

电子邮件地址不会被公开。 必填项已用*标注