【问题标题】:crypto++ rsa key into buffercrypto++ rsa 密钥进入缓冲区
【发布时间】:2016-08-12 04:00:42
【问题描述】:

我开始使用 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();

但我认为保存到文件然后读取文件不是一个好主意, 有什么办法可以直接做吗?

【问题讨论】:

标签: c++ cryptography rsa crypto++


【解决方案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());

相关的 wiki 页面是 Keys and Formats

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-22
    • 2018-01-09
    • 2018-12-12
    • 2018-01-13
    • 1970-01-01
    • 2013-12-26
    • 2015-02-16
    • 1970-01-01
    相关资源
    最近更新 更多