1

TripleDES暗号化と復号化を実装する.NETクラスがあります。コードが多すぎてここに投稿できません。ただし、問題は、暗号化は問題ありませんが、元の平文の長さによっては復号化に一貫性がないことです。他のトリプルDESツールでも同じ値が得られるため、暗号化は問題ないことを私は知っています。

具体的には、元のプレーンテキストの長さが8、16、24、32、40など、つまり8nの場合、最後の文字は結果のプレーンテキストから切り取られます。

暗号化モードはCBCです。キーサイズは24文字(192ビット)です。IVは8文字です。

4

1 に答える 1

4

問題は、(非)パディングアルゴリズムが正しくないためです。

(3)DESは、8バイトのブロックを暗号化/復号化します。すべてのテキストが正確に8バイトであるとは限らないため、最後のブロックにはプレーンテキストからのオリジナルではないバイトが含まれている必要があります。ここでの秘訣は、プレーンテキストの最後の文字がどれであるかを見つけることです。プレーンテキストの長さが事前にわかっている場合もあります。その場合、パディング文字は実際には何でもかまいません。

プレーンテキストの長さがわからない場合は、PKCS5Paddingなどの決定論的パディングアルゴリズムを使用する必要があります。PKCS5Paddingは、プレーンテキストがバイト単位のN *ブロックサイズであっても、常にパディングを実行します。この理由は単純です。そうでない場合、最後のバイトがプレーンテキストであるかパディングであるかがわかりません41 41 41 41 41 41 41 41 08 08 08 08 08 08 08 08。8つの「A」文字で、8つのパディングバイトがあります。

パディング解除アルゴリズムが適切に実装されていないか、非決定論的パディングアルゴリズムが展開されているようです。

于 2012-03-01T16:17:40.353 に答える