2016-05-27 27 views
0

このリンクhttp://csrc.nist.gov/publications/fips/fips197/fips-197.pdfで説明されているアルゴリズムを実装することで、AESの仕組みについてもっと学びたいと思っています。私は暗号化と復号化の両方を停止しており、コードをテストするためにリンクに提供されている例があるので、暗号化が正しいことを確かめています。しかし、私の解読アルゴリズムが正しく動作しているかどうかをテストする方法はわかりません。 私が抱えている問題は、私のAESの実装が16Bの入力で動作していないことです(ガベージを返します)。それでも、25KBの入力に対応しています。また、ファイルの最初のバイトとファイルの最後のバイトを除き、ファイルの大部分を正確に暗号化して解読するという意味でも働いています。残念ながら、私は現在、ここに投稿するコード全体にアクセスすることはできません(私は必要に応じてビットとピースを覚えています)。私は誰かが私の記述に基づいて問題であるかもしれないという考えを持っているかどうかを見たいと思っていました。私は、ファイルが開始バイトと終了バイトのほかにどのように復号化されるのかを理解していないので、これはECBモードであると思われます。したがって、ファイル全体がちょうど始まりと終わりではなくガベージではありません(ECBは1ブロックの入出力は同じサイズの出力ブロック)。AES-128暗号化/復号化

+1

ブロックサイズの倍数でない場合は、入力を埋めていますか? – Buddy

+1

s/EBC/ECB /(電子コードブック) –

+0

@AlanStokesが注目され、修正されました。 –

答えて

0

実際にCBCモードを使用しているように聞こえますが、ivは同じではありません。ちょうどivのためにゴミを拾うかもしれません。 CBC modeを参照してください。

最後に間違ったバイトがパディングの問題である可能性があります。ブロックサイズの倍数ではない暗号化された入力をどう扱っていますか?

+0

しかしそれは問題です。私はIVを使用していないし、次の平文入力と私の暗号文をXORしない。私はECBを使用していると確信しています。入力を状態配列にコピーし、暗号化し、アウトアレイに転送してから、プロセスを繰り返します。連鎖はありません。 –

+0

あなたはパディングは言及していませんが、どうやってそれを扱っていますか?あなたがしなければならないことは、16バイト、20バイト、32バイトを稼働させることです。これは単純なケースです。別のソースの参照暗号を取得し、比較するか、暗号化または復号化が正しいか?それに壊れているものを選んでください。サンプル入力と出力を16進数の質問に追加します。 – zaph

+0

ああ私の謝罪。私がそれを知っていることを知っていた理由は、ECBとCBCの両方がパディングを必要としていることを知っていたからです。なぜなら、あなたはサイファーテキストスティールを実装しようとしない限り、それ自体の問題があるからです。私は自分のコードに埋め込みを実装しました。ファイルの長さを16の最も近い倍数に切り上げています(使用しているAESの入力ブロックサイズは16バイトなので)。その後、私は暗号文を解読し、元のファイルのパディングされていない長さまで出力します。 –