事情的起因是这样子的,公司对一些报价数据会做一些加密处理。使用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-----