2012-03-01 13 views
1

私はTripleDES暗号化と復号化を実装する.NETクラスを持っています。コードはあまりにも多くここに投稿することです。しかし、問題は、暗号化はOKですが、元の平文の長さによっては復号化に一貫性がないことです。他のトリプルDESツールも同じ価値を提供するので、暗号化はOKです。元の平文の長さが8,16,24,32,40などすなわち8Nた場合TripleDES最後の文字を切り捨てる復号化

具体的には、最後の文字は、結果として得られる平文から遮断されています。

暗号化モードは、キーサイズは24文字(192ビット) IVは、(非)パディングアルゴリズムが正しくないため、問題が8つの文字

+0

私たちは、あなたが「バイト」または「オクテット」、ない文字について話しているC/Cは、あなたの脳をマングル++聞かせてはいけないいくつかのコード:) – Spikeh

+0

を見ずにあなたを助けることはできません。 –

+0

暗号化と暗号文は、時にはプレーンテキストと同じ長さである前に、プレーンテキストの長さがわからない場合@Spikehはい、私たちは –

答えて

3

であるCBC あります。

(3)DESは、暗号化/ 8バイトのブロックを復号化します。すべてのテキストが正確に8バイトであるわけではないため、最後のブロックにはプレーンテキストの元ではないバイトが含まれている必要があります。ここでは、どの文字がプレーンテキストの最後の文字かを調べることです。プレーンテキストの長さがあらかじめ分かっていることがあります。パディング文字は何でもかまいません。

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

どちらかのアンパディングアルゴリズムがうまく実装されていないこと、または非決定パディングアルゴリズムが展開されているようです。

+0

:)をすることができ、その後、あなたはトラブルにおそらくあります。場合によっては、プレーンテキスト自体にバイト単位の長さが含まれることがあります(たとえば、BER/DERエンコーディングを使用してASN.1で定義されたオブジェクトを暗号化する場合)。 –

+0

パディングモードをZeroからPKCS7に変更しました(他のオプションはANSIX923、ISO10126、NONEです)、解読は今のところうまくいくようです。PKCS7とZEROs Paddingモードで解読が正しく機能する理由を説明してください。そして、はい、プレーンテキストの長さは可変です。 –

+0

はい、ゼロのパディングモードは通常、確定的ではありません。最後のブロックをゼロで埋めています。したがって、アンパッディングがバイトを削除するときには、プレーンテキストの最後の00hバイトも削除されます。プレーンテキストがnullで終了すると考えると、これは "楽しい"ことです。 0のパディングは、プレーンテキストの長さが分かっている場合にのみ使用してください。 –

関連する問題