1

Arc4暗号化を行うためにCrypto++ライブラリを使用していました。ここからの参照ですが、完全には説明されていません: 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;

暗号化および復号化後のメッセージは完全にゴミであり、読むことができませんでした。つまり、「こんにちは」に戻って復号化されません。

では、上記のキーでメッセージを暗号化および復号化するにはどうすればよいですか?

4

1 に答える 1

1

2 つの問題。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;
于 2014-11-17T01:45:46.857 に答える