2016-08-11 150 views
1

我開始做與RSA的加密解密的文件,但我想鍵保存到像串並等緩衝,所以我可以用它加密+ 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(); 

,但我不認爲這是個好主意,以保存到文件,然後讀取該文件, 有沒有辦法直接做到這一點?

+0

檢查https://github.com/weidai11/cryptopp/blob/06a7abc9c8b72ad0954d3e7c216aba5d87e27be1/datatest.cpp,他們在那裏使用'StringSink'。其他測試也有'ArraySink'。 – melak47

回答

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