加密++ rsa密钥进入缓冲区

crypto++ rsa key into buffer

本文关键字:缓冲区 密钥 rsa 加密      更新时间:2023-10-16

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

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

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());

我想把键保存到像string

这样的缓冲区中

这有点让我困惑,因为我不确定您的目标是基于从文件中往返键。回想一下,您可以直接使用该键:

RSAES_OAEP_SHA_Decryptor dec(privateKey);

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

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

或:

ByteQueue queue;
privateKey.DEREncode(queue);

如果你愿意,你仍然可以使用管道:

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

一个相关的wiki页面是Keys and Formats