如何读取RSA公钥和私钥到单个RSA结构
How to read RSA public and private keys into single RSA struct?
我要做的是生成随机RSA密钥,然后在我的程序终止之前存储它们。使用RSA_generate_key、pem_write_bio_rsprivvatekey和PEM_write_bio_RSA_PUBKEY,这部分工作得很好。我还可以加密/解密使用RSA_generate_key返回的RSA结构。
然而,我的问题来了,当我的程序重新启动,我想读回我以前存储的键。我可以使用pem_read_bio_rsprivvatekey和PEM_read_bio_RSA_PUBKEY来拉入密钥,但我需要将它们放入相同的RSA结构中,类似于RSA_generate_key存储密钥的方式。
我的代码如下所示。我将键存储在内存中,并附带一个小标题,告诉我键有多大。私钥在头之后开始,公钥在私钥之后存储。privateKey = (uint8_t *) ( buffer + rsaStruct->hdrSize );
publicKey = (uint8_t *) ( privateKey + rsaStruct->privateKeyLength );
bioPrivate = BIO_new_mem_buf( (void *) privateKey, rsaStruct->privateKeyLength );
bioPublic = BIO_new_mem_buf( (void *) publicKey, rsaStruct->publicKeyLength );
bioPrivate = BIO_new_mem_buf( (void *) privateKey, rsaStruct->privateKeyLength + rsaStruct->publicKeyLength );
if( bioPrivate == NULL || bioPublic == NULL ) {
fprintf( stderr, "%s: BIO_new_mem_buf failed!n", __FUNCTION__ );
return ECE_RSA_ERROR_BIO_CREATION_FAILED;
}
PEM_read_bio_RSAPrivateKey( bioPrivate, &keyPair, NULL, NULL );
PEM_read_bio_RSA_PUBKEY( bioPublic, &keyPair, NULL, NULL );
BIO_free( bioPrivate );
BIO_free( bioPublic );
如果我尝试在相同的RSA结构中发送,它似乎不起作用。我可以加密,但我的解密失败了。这可能是因为公钥是最后检索到的密钥,也是用于加密的密钥。如果第二个调用覆盖了我的RSA结构的地址,那么我将得到一个除了公钥之外什么都没有的RSA结构。
无论如何,如果有人能告诉我如何将公钥和私钥都放入相同的RSA结构中,那就太好了!
与RSA私钥相比,公钥只包含公共指数。所以只要把它从公钥复制到私钥结构,一切都应该工作。
相关文章:
- 如何在openssl-ecc中获取十六进制格式的私钥
- SSH通过/sbin/SSH无法读取RSA密钥文件(从控制台运行)
- 如何在C++中使用X509证书模在令牌中查找私钥
- 私钥解密代码使用公共接口说明符到 BSAFE 库 v6.0?
- 从字符串 Crypto++ 导入 RSA 公钥/私钥
- 将私钥和证书存储在C++/OpenSSL中
- C++生成 RSA 密钥对并读取
- 博坦加载现有的 RSA 私钥
- C 从XML导入CAPI/CNG中的RSA私钥
- 使用密码将 RSA 私钥写入 PEM 文件
- 一代 RSA-2048 密钥(公钥和私钥)
- RSA 私钥加密 QT C++
- 使用 openssl libcrypto 解密具有 RSA 私钥的数据时RSA_NO_PADDING的使用
- 用于 RSA 解密C++的私钥
- 自定义iojs加载项无法加载RSA私钥
- 通过OpenSSL(c++)以XML(w3c)格式保存RSA公钥和私钥
- 如何使用PEM_write_RSA_PrivateKey加密RSA私钥并将其写入文件
- 将代码从c++移植到使用RSA pkcs# 1私钥加密
- 如何读取RSA公钥和私钥到单个RSA结构
- 从RSA密钥对变量中分离公钥和私钥