Я использовал библиотеку Crypto ++ для шифрования arc4. Ссылка отсюда, но не полностью объяснено: http://www.cryptopp.com/wiki/Stream_Cipher.
Вот мой код:
string key = "key";
string msg = "hello";
ARC4 arc4((byte*)key.c_str(), sizeof((byte*)key.c_str()));
arc4.ProcessData((byte*)msg.c_str(), (byte*)msg.c_str(), sizeof((byte*)msg.c_str()));
arc4.ProcessData((byte*)msg.c_str(), (byte*)msg.c_str(), sizeof((byte*)msg.c_str()));
cout << msg << endl;
Мое сообщение после шифрования и дешифрования, что полностью мусор, то я не мог прочитать.
не расшифровывается обратно в «привет» короче.
Итак, как я могу зашифровать и расшифровать сообщение с ключом, как указано выше?
Две проблемы. Во-первых, вам нужно использовать строку size()
, и не sizeof()
, Во-вторых, вам нужно сбросить arc4
объект при расшифровке. В противном случае состояние шифра продолжается с предыдущего шифрования.
string key = "key";
string msg = "hello";
ARC4 arc4((byte*)key.data(), key.size());
arc4.ProcessData((byte*)msg.data(), (byte*)msg.data(), msg.size());
// Reset state
arc4.SetKey((byte*)key.data(), key.size());
arc4.ProcessData((byte*)msg.data(), (byte*)msg.data(), msg.size());
cout << msg << endl;