1

私は圧縮と暗号化システムに取り組んでいますが、専門家と一緒に考え抜くことで克服できると思う小さな障害に遭遇しました。

ゴール

多くの種類のファイルを保持できるファイルコンテナシステムが必要です。圧縮/暗号化時に定義される特定のルールとファイルヘッダーに格納されている情報に基づいて、それぞれを圧縮(LZF)および暗号化(AES)できるようにしたいと考えています。このコンテナからファイルをストリームとして取得できるようにしたい。つまり、ファイルを順番に読み取るには、ファイルをブロック単位で圧縮/暗号化する必要があります。そうしないと、ファイル全体を一度に復号化してからメモリに解凍する必要があり、このプロセスで使用するメモリをできるだけ少なくしたいと考えています。

現在のステータス

コンテナ自体、ファイルテーブル、およびすべてのファイルの情報に関する情報を含むヘッダーシステムを完成させました。私は現在、実際のコンテナを作成するためのファイル書き込みストリームに取り組んでいます。

問題

このプロセスを実行している間、私はファイルのデータをバイト配列に圧縮し、それをブロックで暗号化する方法を理解しようとしてきました。私は1024バイトブロックに落ち着いたと思います。これは、AESが128ビットブロックで暗号化するため、64ブロックのAES暗号化データが保存されることを意味します。このシステム全体は、ストリームを使用してセットアップされます。これは、システムに送信されるデータの量を制御できないことを意味します。私の問題は、データを圧縮するときに、圧縮するデータの大きさがまったくわからないことです。元のサイズよりも小さくても、同じサイズでも、さらに大きくてもかまいません。データをブロックで正常に解凍する方法を知る必要があります。

問題の例

私が説明したこのシステムに暗号化、圧縮、保存したい情報の128バイトブロックがあるとしましょう。私はそれをストリームに書き込み、それが次にそれを圧縮します。また、128バイトのブロックが64バイトのブロックに圧縮されているとしましょう。次に、長さが256で、128バイトに圧縮された別のブロックを送信します。これらのブロックは両方ともバッファーにコピーされ、新しい384バイトのバッファーが暗号化のために送信され、(24)16バイトのブロックが生成されます。次に、1024バイトのブロックでコンテナシステムに書き込まれます。

この例では、情報がブロックになっているため、情報を復号化するのに問題はありませんが、解凍ステップで同じことを言うことはできません。圧縮についての私の理解から、圧縮された64バイトブロックと128バイトブロックの両方を復号化しようとすると、元々別々に圧縮されていたため、無効なデータになります。これについてさらに説明が必要な場合は、お知らせください。

4

1 に答える 1

1

ストリームからデータを読み取ると、バイト数が取得されます。最後のブロックでのみ、ブロックサイズよりも小さくなります。これは、WriteFinalBlock を呼び出して、エンクリプタにパディングを実行させるシグナルです。

于 2012-02-14T22:03:35.197 に答える