使用RSA加密后,我正在尝试将RSA私钥导出到文件中。 到目前为止,我尝试使用2种方法导出它:
int main()
{
AutoSeededRandomPool rnd;
const std::string publickey_str =
"-----BEGIN PUBLIC KEY-----\n"
"rsa public key there\n"
"-----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
是否可以使用这两种方法之一实现我的目标,还是必须在将RSA应用于RSA之前将其私钥转换为另一种格式(BER或PEM编码)?
预先感谢
P.S:我的问题是Windows特有的,如果它有任何关系。
答案 0 :(得分:0)
否。
由于所需的安全填充,在这种情况下,OAEP只能安全地加密比密钥大小少得多的数据量。 RSA像其他任何密码一样,都会加密 bytes ,因此将密钥更改为文本肯定无济于事。还将进一步增加需要加密的密钥大小。
您可以做的是使用混合加密:首先使用新的随机密钥在安全的操作模式下使用AES加密,然后使用RSA加密AES密钥。
您可能需要考虑您的安全方案;仅当RSA解密密钥比要加密的RSA密钥更安全时,RSA加密才有用。否则,您只是将问题转移到了包装和拆包私钥的RSA密钥对。