0

基本的な LFSR ベースのストリーム暗号暗号化モジュールを C で作成した後、通常のテキスト ファイルで試し、次に Windows の .exe ファイルで試しました。ただし、復号化した後、ファイルは実行されておらず、16 ビットであるというエラーが発生します。明らかに復号化のエラーです。それとも、バイナリ コードを改ざんすると破損するようにファイルが作成されていますか?

私は、自分の側でエラーを見つけることを期待して、テキスト ファイルで自分のプログラムをチェックしています。しかし、質問は、誰かが実行可能ファイルで独自の暗号化プログラムを実行しようとしたことがありますか? これに対する彼らの明白な答えはありますか?

4

3 に答える 3

5

実行可能ファイルについて特別なことは何もありません。これらは明らかにバイナリ ファイルであるため、00127 を超えるバイト数とバイト数が含まれています。アルゴリズムがバイナリセーフである限り、機能するはずです。

16 進エディタを使用して、元のファイルと復号化されたファイルを比較します。それらがどのように異なるかを確認します。

表示されるエラーは、実行可能ヘッダーを正しく復号化していないことを意味するため、復号化の誤りがファイルの最初の数バイトにすでに影響しているはずです。

于 2011-12-16T11:45:10.000 に答える
2

明らかに復号化のエラーです。exe は、他のファイルと同じようにバッグ 'o バイトであり、魔法はありません。テキスト ファイルでは取得できないバイト値に遭遇する可能性が高いだけです。ゼロのように。

于 2011-12-16T11:48:20.103 に答える
1

復号化プロセスは、暗号化の逆である必要があります。言い換えるとDecrypt(Encrypt(X)) == X、すべての入力 X に対して、すべての可能な長さ、すべての可能なバイト値。

2 つの変換が実際に相殺されることを証明できるように、ランダム化されたデータを使用していくつかのペアワイズ チェックを実行するテスト ハーネスを自分で作成することをお勧めします。私は次のようなことを意味します:

for length from 0 to 1000000:
 generate a string of that length with random contents
 encrypt it to a fresh memory buffer
 decrypt it to a fresh memory buffer
 compare the decrypted string with the original string     

ファイル処理コードからアルゴリズムを分離できるように、まずメモリ内の文字列に対してこれを行います。アルゴリズムが適切に反転していることを証明したら、ファイルに対して同じことを行うことができます。バイナリ ファイルの処理で問題が発生する可能性があると他の人が言っているように、これはよくある落とし穴です。

于 2011-12-17T01:53:13.757 に答える