我不知道如何使用加密加密與原RSA消息++沒有 涉及OAEP或PKCS#1。有人能夠給我看一些示例代碼嗎?
當你知道去哪裏看看就很容易:Raw RSA來自Crypto ++ wiki。下面的代碼是從頁面中提取的。
加密
Integer n("0xbeaadb3d839f3b5f"), e("0x11"), d("0x21a5ae37b9959db9");
RSA::PublicKey pubKey;
pubKey.Initialize(n, e);
/////////////////////////////////////////////////////////
Integer m, c;
string message = "secret";
cout << "message: " << message << endl;
// Treat the message as a big endian byte array
m = Integer((const byte *)message.data(), message.size());
cout << "m: " << hex << m << endl;
// Encrypt
c = pubKey.ApplyFunction(m);
cout << "c: " << hex << c << endl;
解密
Integer n("0xbeaadb3d839f3b5f"), e("0x11"), d("0x21a5ae37b9959db9");
AutoSeededRandomPool prng;
RSA::PrivateKey privKey;
privKey.Initialize(n, e, d);
/////////////////////////////////////////////////////////
Integer c(0x3f47c32e8e17e291), r;
string recovered;
// Decrypt
r = privKey.CalculateInverse(prng, c);
cout << "r: " << hex << r << endl;
// Round trip the message
size_t req = r.MinEncodedSize();
recovered.resize(req);
r.Encode((byte *)recovered.data(), recovered.size());
cout << "recovered: " << recovered << endl;
下面是一個示例輸出:
$ ./cryptopp-raw-rsa.exe
message: secret
m: 736563726574h
c: 3f47c32e8e17e291h
r: 736563726574h
recovered: secret
有一點需要注意:c = m^e mod n
,所以有上感嘆文字大小和密文大小一些限制。本質上,m
和c
必須小於n
。在此示例中,將字符串secret
替換爲now is the time for all good men to come to the aide of their country
將會失敗,因爲其大於n
(當轉換爲Integer
時)。
您可以通過功能MaxPreImage()
獲得最大純文本大小,最大密文大小爲MaxImage()
。
我必須加密,並從PC登錄的消息。然後設備解密 並驗證消息。該設備然後將回復加密的消息 並在其上簽名。 PC將解密消息並在之後進行驗證。
從表面上看,這看起來會遭受重播攻擊。您可能需要一個帶有保護的協議。
來源
2013-10-04 02:15:17
jww
感謝您的代碼。我瞭解你的代碼。但是,我的情況有點不同。 – crackpot 2012-03-23 03:16:48
該代碼進行RSA加密和解密。如果這不是你想要的,我只會刪除它。 – 01100110 2012-03-23 03:23:57
對不起,評論是用返回鍵發佈的,但我只是想插入一行。 我已經進一步闡述了我在這個問題上的處境。 我真的很感謝你的幫助。^_^ – crackpot 2012-03-23 03:43:59