0

私は暗号クラスを学んでおり、割り当ての 1 つで、一連の 16 進暗号文を xor し、暗号化されたメッセージを見つけようとするように求められました。

変数に 16 進数値を保持するために int または long の前に '0x' を実行できることはわかっていますが、私のメッセージがこれほど長い場合はどうなるでしょうか。

271946f9bbb2aeadec111841a81abc300ecaa01bd8069d5cc91005e9fe4aad6e04d513e96d99de2569bc5e50eeeca709b50a8a987f4264edb6896fb537d0a716132ddc938fb0f836480e06ed0fcd6e9759f40462f9cf57f4564186a2c1778f1543efa270bda5e933421cbe88a4a52222190f471e9bd15f652b653b7071aec59a2705081ffe72651d08f822c9ed6d76e48b63ab15d0208573a7eef027

オーバーフローします。メッセージ全体を 1 つの変数に入れる方法はありますか? メッセージをサブパートに分割することもできますが、(可能であれば) 多くの部分ではなく可変部分にすることを好みます。メッセージを保持するために文字列を使用しようとしましたが、演算子 '^' を xor に使用するにはどうすればよいですか?

それとも、私が知らないもっと簡単なテクニックはありますか?

ありがとう

4

4 に答える 4

2

このような場合、通常は文字列またはvector<char>データを保持するために使用します。文字列/ベクトル全体を のオペランドとして使用することはできませんが^、一度に 1 バイトずつ適用できます。

コードの残りの部分を単純化したい場合operator^は、バイト単位の XOR を実行するためにオーバーロードされたクラスを作成できるため、コードは次のようになりますresult = key ^ message;

于 2012-08-10T00:03:02.873 に答える
1

まあ、任意のサイズの整数の配列を使用し、一度に要素に演算子を適用できます(おそらく、文字の配列よりも少し効率的です)。オーバーロードされた演算子を使用してクラス内にラップするという@JerryCoffinのアイデアは、使用する実際の表現に関係なく、良いものです。

于 2012-08-10T00:06:27.307 に答える
0

Jerry と Scott は適切な提案をしています。もう 1 つのオプションは、既存のライブラリを使用することです。たとえば、XOR をサポートするhttp://gmplib.orgの GNU GMP 任意精度数学ライブラリ ( http://gmplib.org/manual/Integer-Logic-and- Bit-Fiddling.html#Integer-Logic-and-Bit-Fiddling ) および 16 進数で読み取る "scanf" スタイル関数 ( http://gmplib.org/manual/Formatted-Input-Strings.html#Formatted-Inputを参照) -Strings ) であり、暗号化の優れたサポートを提供することを明確に目指しています。

于 2012-08-10T00:51:29.470 に答える
0

別のテキストファイルに入れる

ファイルをバッファに読み込む

アスキー文字を 16 進値に変換します

于 2012-08-10T00:02:29.910 に答える