Как ввести строку для шифрования с помощью arc4?


Я был с использованием библиотеки Крипто++, чтобы сделать мою шифрования 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;

Мое сообщение после шифрования и дешифровки, которое является полным мусором, я тогда не смог прочитать. не расшифровывается обратно в "привет" короче.

Итак, как я могу зашифровать и расшифровать сообщение с ключом, как указано выше?

1 2

1 ответ:

Две проблемы. Во-первых, вам нужно использовать строку 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;