1

openssl AES を使用してデータを暗号化しようとしていますが、このリンクでかなり良い例を見つけまし 。キーサイズの倍数を実行しますが、データをパディングします。たとえば、暗号化するための入力として 16 バイトが必要です。または 16 の任意の倍数を指定すると、null を含む 1024 が返されますが、それでもサイズ 1040 の出力が得られますが、私が知っているように、AES 入力サイズ = 出力サイズの場合、入力は 128 ビット / 16 バイトの倍数です。私の前にこの例を試した人はいますか? 前もって感謝します 。

4

1 に答える 1

4

ほとんどのパディング スキームでは、最小限のパディングを常に追加する必要があります。これは(少なくとも主に)受信側で最後のバイト(または最後の少量のデータ)を見て、最後のデータのどれだけがパディングされているか、そしてどれだけが実際のものかを知ることができるようにするためですデータ。

たとえば、典型的なパディング スキームでは、データの後に 0 バイトが配置され、最後にパディングされるバイト数を含む 1 バイトが配置されます。たとえば、4 バイトのパディングを追加した場合、パディング バイト (16 進数) は次のようになります00 00 00 04。別の一般的な可能性として、同じ値をすべてのパディング バイトに入れるため、次のようになります04 04 04 04

受信側では、アルゴリズムがパディング バイトを取り除く準備ができている必要があります。そのために、最後のバイトを調べて、末尾から削除して無視するデータのバイト数を通知します。パディングが存在しない場合は、何らかの値が含まれます (メッセージの最後のバイトがたまたま何であれ)。パディングが追加されなかったことを知る方法がないため、その値を調べて、そのバイト数のデータを削除します。この場合のみ、パディングの代わりに実際のデータを削除しています。

入力がたまたまブロック サイズの正確な倍数である場合に余分なデータを追加しないようにするパディング スキームを考案することは可能かもしれませんが、すべてのメッセージに少なくとも 1 バイトのパディングを追加する方がはるかに簡単です。受信者は、常に最後のバイトを読み取り、受信したもののどれだけがパディングされているかを見つけることに頼ることができます。

于 2012-11-03T22:21:04.127 に答える