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