VB.NETのAESManagedまたはRijndaelManagedを使用してデータを復号化および暗号化しようとしています。サイズがブロックサイズの倍数ではないデータパケットがあります。この場合、復号化しようとすると「復号化するデータの長さが無効です」というエラーが表示されます。データの最後にある不足しているブロックを削除した場合にのみ、復号化できます。しかし、私は最後のブロックに何があるかを知る必要があります。
それで
ブロックサイズの倍数ではないサイズのデータを復号化することは可能ですか?
もしそうなら、どうすればそれを行うことができますか?
編集:
書き忘れた情報がいくつかあります。
ブロック暗号モードはCBCである必要があります。最後のバイトを除くすべてのデータを正常に復号化できるためです。
データ全体を復号化できるクライアントがあります。復号化機能のasmコードを見つけました。私がそれを正しく理解している場合、それは次のように機能します:
x =不十分なブロックサイズ(x <16)
buffer =(16 + x)のサイズの配列
- 最初に、関数は前の復号化されていないバイトを取得し、それをバッファーの最初の16バイトに配置します。(16バイト)
- 復号化されていない最後のバイトをバッファに追加します。(xバイト)
- buffer [x]からバッファの最後まで復号化し、結果を同じ場所に配置します。(バッファの最後の16バイト)
- buffer[0]からbuffer[15]に復号化し、結果を同じ場所に配置します。(バッファの最初の16バイト)
- ご存知のように、CBCは復号化されたバイトを以前の復号化されたバイトと排他的論理和します。したがって、関数は最初のxバイトのバッファーと最後のxバイトのバッファーを排他的論理和します。
.NETでこのように最後のバイトを復号化する方法はありますか?