加密RSA私钥并使用Crypto ++将其写入文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了加密RSA私钥并使用Crypto ++将其写入文件相关的知识,希望对你有一定的参考价值。

在使用RSA加密后,我正在尝试将RSA私钥导出到文件。到目前为止,我试图用2种方法导出它:

int main()
{
    AutoSeededRandomPool rnd;
    const std::string publickey_str = 
    "-----BEGIN PUBLIC KEY-----
"
    "rsa public key there
"
    "-----END PUBLIC KEY-----";

    RSA::PublicKey master_publicKey;

    StringSource source(publickey_str, true);
    PEM_Load(source, master_publicKey);

    CryptoPP::RSAES_OAEP_SHA_Encryptor e(master_publicKey);

    InvertibleRSAFunction params;
    params.GenerateRandomWithKeySize(rnd, 4096);

    RSA::PrivateKey privateKey(params);

    FileSink file("exported.bin")

    //Method 1

    FileSink file("exported.bin")
    ArraySource export_private_key(privateKey, sizeof(privateKey),true, AuthenticatedEncryptionFilter(e, new Redirector(file))); //can't find a way to convert privateKey to a valid type for ArraySource

    //Method 2
    privateKey.Save( new AuthenticatedEncryptionFilter(e, new Redirector(file))); //doesn't work, as Save() expects BufferedTransformation

有没有办法使用这两种方法中的一种来实现我的目标,或者我必须在将RSAC应用于其之前将我的私钥转换为另一种格式(BER或PEM编码)?

提前致谢

P.S:我的问题是Windows特定的,如果它以任何方式重要。

答案

没有。

由于需要安全填充(在这种情况下为OAEP),RSA只能安全地加密(大大小)数据量而不是密钥大小。与任何密码一样,RSA会加密字节,因此将密钥更改为文本肯定无济于事。它还将进一步扩大需要加密的密钥大小。

您可以做的是使用混合加密:首先使用新的随机密钥在安全操作模式下使用AES进行加密,然后使用RSA加密AES密钥。


您可能想要考虑一下您的安全方案; RSA加密仅在RSA解密密钥比您正在加密的RSA密钥更安全时才有用。否则,您只是将问题转移到包装和解包私钥的RSA密钥对。

以上是关于加密RSA私钥并使用Crypto ++将其写入文件的主要内容,如果未能解决你的问题,请参考以下文章

C# RSA 加密/解密与传输

如何从 .cer 中提取 RSA 公钥并使用 OpenSSL 将其存储在 .pem 中?

使用 keytab 而不将其写入磁盘的 Bash 脚本

使用 excelwriter 写入 Excel 文件不提供文件

使用 OpenSSL 生成短许可证密钥

使用 Polygon 裁剪光栅文件并使用相同的文件名写入输出