2011-12-16 18 views
0

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

私は自分のプログラムでエラーを探すためにテキストファイルをチェックしています。しかし、問題は、実行可能ファイルで自分の暗号化プログラムを実行しようとしたことですか?彼らには明らかな答えがありますか?

+1

あなたが言ったことは、テキストファイルを処理していることを暗示していました。バイナリモードで入力ファイルと出力ファイルを開くことを忘れないでください._(UNIXとテキストモードはほとんどありません)。 –

+0

はい、バイナリモードで開きます。 – AruniRC

答えて

5

実行可能ファイルに特別なものはありません。これらは明らかにバイナリファイルなので、00バイトと127を超えます。アルゴリズムがバイナリセーフである限り、動作するはずです。

元のファイルと復号化されたファイルを16進エディターで比較します。それらがどのように異なっているかを見る。

エラーは、実行可能なヘッダーを正しく解読しなかったことを意味します。したがって、復号ミスがファイルの最初の数バイトに既に影響している必要があります。

2

明らかに復号化に誤りがあります。 exeは、他のファイルと同じくバッグのバイトです。魔法はありません。あなたはテキストファイルでは得られないバイト値に変換するだけです。ゼロのように。

1

解読プロセスは、その暗号化の逆でなければなりません。換言すれば、すべての可能な長さのすべての入力Xについて、すべての可能なバイト値のうちDecrypt(Encrypt(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  

まず、ファイル処理コードからアルゴリズムを分離できるように、メモリ内の文字列でこれを行います。 アルゴリズムが正しく反転していることが証明されたら、ファイルに対しても同様に処理できます。バイナリファイルの取り扱いに関する問題にぶち当たっているかもしれないという人もいます。

関連する問題