crypto ++ rsa key into buffer

时间:2016-08-11 08:12:55

标签: c++ cryptography rsa crypto++

我开始使用rsa制作加密解密文件,但我想将密钥保存到像字符串等的缓冲区中,以便我可以使用它

我知道我可以将密钥保存到文件中

AutoSeededRandomPool rng;
RSA::PrivateKey privateKey;
privateKey.GenerateRandomWithKeySize(rng, 2048);
RSA::PublicKey publicKey(privateKey);


Base64Encoder privkeysink(new FileSink("C:\\1\\privkey.txt"));
privateKey.DEREncode(privkeysink);
privkeysink.MessageEnd();

Base64Encoder pubkeysink(new FileSink("C:\\1\\pubkey.txt"));
publicKey.DEREncode(pubkeysink);
pubkeysink.MessageEnd();

但我不认为保存到文件然后读取文件是个好主意, 有没有办法直接这样做?

1 个答案:

答案 0 :(得分:1)

AutoSeededRandomPool rng;
RSA::PrivateKey privateKey;
privateKey.GenerateRandomWithKeySize(rng, 2048);

Base64Encoder privkeysink(new FileSink("C:\\1\\privkey.txt"));
privateKey.DEREncode(privkeysink);
privkeysink.MessageEnd();

...

你有两件事情要发生。首先,如何创建和使用RSA密钥。其次,你如何保存密钥。在这两者之间,您似乎添加了一个重新加载密钥的额外步骤。

密钥的创建看起来很好(你正在做):

privateKey.GenerateRandomWithKeySize(rng, 2048);

当你想保存它时,只需保存它(你正在做的):

privateKey.DEREncode(FileSink("privkey.der", true).Ref());

无需重新加载。保存后它仍然很好。在这种情况下,只需使用它(您在这里添加额外的步骤):

RSAES_OAEP_SHA_Decryptor dec(privateKey);

如果密钥持久存储到磁盘而您需要重新加载,则:

privateKey.BERDecode(FileSource("privkey.der").Ref());

甚至:

RSAES_OAEP_SHA_Decryptor dec;
dec.AccessKey().BERDecode(FileSource("privkey.der").Ref());
  

我想将密钥保存到像字符串

这样的缓冲区中

这种让我感到困惑的是因为我不确定你的目标是基于从文件中往返三角。回想一下,您可以直接使用密钥:

RSAES_OAEP_SHA_Decryptor dec(privateKey);

但是如果你想将它保存到内存缓冲区,那么:

string buff;
privateKey.DEREncode(StringSink(buff).Ref());

或者:

ByteQueue queue;
privateKey.DEREncode(queue);

如果您愿意,仍然可以使用the pipeline

 privateKey.DEREncode(Base64Encoder(new FileSink("privkey.der")).Ref());

相关维基页面为Keys and Formats