2016-06-19 10 views
0

最終的にディスクに書き込まれるファイルのさまざまな部分を暗号化するために、同じinitVectorを使用してCipherOutputStreamを使用して書き込むことは安全ですか?私は同じキーを使用しますが、おそらくcos.write()を呼び出すたびに異なるivを使用したいと考えています。これが行われるならば、私は毎回新しいivを無作為に生成する必要があります。次に、解読中に、これらの初期ベクトルを解読暗号にどのように渡すか。 ivがファイルの内容に埋め込まれ、確定的な方法で読み返すことができますか?私はそれが役立つ場合は、ivの長さを修正することができます。AESを使用したスト​​リーム処理用のinitVector

答えて

2

初期化ベクトル(IV)は、連鎖モードの開始に使用されます。その後、このIVで初期化された連鎖モードは、のの暗号ストリームを閉じるまで有効です。

あなたはミッドストリームスイッチIVに必要な場合は、オフ仕上げに適用可能なパディングを適用するなど、継続的な暗号化ストリームが必要になります。これは、1つの「暗号化ストリーム」がいつ終了するかを識別するためのスキームの必要性と、新たな開始をもたらす。

あなたはランダムアクセスのいくつかの種類を必要とするか、暗号化されたデータとの明確な混合でデータを持っていない限り、あなたは通常、一つだけのユニークなIVで一つのストリーム内のすべてのデータを暗号化します。

IVについては、暗号化されたデータの前にファイルにプリペンドすることができます。これにより、暗号ストリームをインスタンス化する直前にこれを読み取ることができます。

+0

すばらしい、ありがとう!私があなたが言及した連鎖について読むことができるところはありますか? – Merrin

+1

[ウィキにはこれに関する素晴らしい記事があります](https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation) –

+0

また、暗号化中にivをバイトストリーム自体に書き込むことができたので、復号化する。 – Merrin

関連する問題