如何读取RSA公钥和私钥到单个RSA结构

How to read RSA public and private keys into single RSA struct?

本文关键字:RSA 私钥 单个 结构 公钥 读取 何读取      更新时间:2023-10-16

我要做的是生成随机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私钥相比,公钥只包含公共指数。所以只要把它从公钥复制到私钥结构,一切都应该工作。