Я не знаю, как зашифровать сообщение с помощью необработанного RSA с использованием Crypto ++ без участия OAEP или PKCS # 1.Может ли кто-нибудь любезно показать мне пример кода?
Это достаточно просто, когда вы знаете, где искать: Raw RSA из вики Crypto ++.Код ниже взят со страницы.
Шифрование
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
.
Максимальный размер обычного текста можно получить с помощью функции * 1036.* и максимальный размер зашифрованного текста с MaxImage()
.
Я должен зашифровать и подписать сообщение с ПК.Затем устройство расшифровывает и проверяет сообщение.Затем устройство ответит зашифрованным сообщением и подпишет его.ПК расшифрует сообщение и проверит его позже.
На первый взгляд это похоже на повторные атаки.Вам может понадобиться протокол с защитой.