2017-03-10 2 views
1

私はこの質問をしています。 56ビットのキーと64ビットの入力ブロックサイズのDESの暗号化が与えられました。56ビットDESが64ビットにパディングされ、1バイトの復号化の不足が発生しました

ブロックサイズは8バイトで、最初の7番目のバイトを復号化することができました。しかし、最後のバイトについては、DESは56ビットであり、64ビットにパディングされているので、解読されたメッセージは1バイト不足です。

私が7回目のループに到達するまでに、plaintext1は既に空であり、したがって1バイト不足です。

これを解決する方法はありますか?

編集

String plaintext1 = "ZZZZZZZ"; 
//removed line 
System.out.println(Arrays.toString(plaintext1 .getBytes())); 
System.out.println(plaintext1); 

public static byte[] paddingBytes(byte[] input, int blockSize) { 
    int paddingSize = (blockSize - (input.length % blockSize)) % blockSize; 
    byte[] padding = new byte[paddingSize]; 
    return concat(input, padding); 
} 
+1

詳細については、コードとデータをご提供ください。 – zaph

+0

@zaph質問が更新されました。申し訳ありませんが、これは私の割り当てであり、私は剽窃を恐れていますので、私はコンセプトについて記述することができます。 – guest176969

+0

@zaphどのようなアイデアですか? – guest176969

答えて

2

DESは8バイト、各バイトの最下位ビットが、各バイトのパリティを検証するために使用することができるように符号化された56ビットの鍵を持っているが、それは使用されません暗号自体によって

DESはブロック指向の暗号化方式であり、入力データはブロックサイズの正確な倍数(8バイト)である必要があります。入力データサイズが正確な倍数でない場合、それは埋め込まれなければならない。パディングが必要な場合は、暗号化の前に追加し、復号化後は削除する必要があります。通常のパディングはPKCS#5です。通常、パディングモードは、ECBまたはCBCの操作モードを使用するブロック暗号に対して構成できます。

平文サイズを計算できず、最後のバイトに任意の値を設定できる場合は、常に埋め込みを適用する必要があります。これは、入力サイズがブロックサイズの倍数であっても当てはまります。それ以外の場合は、最後のバイトが復号後にパディングまたは平文で構成されているかどうかを判断することはできません。

+0

良い答えですが、私は文法を大幅に変更したので、やや不正確でした。 zaph、私は何かを台無しにしたかどうか確認できますか?もちろん編集に同意しないとロールバックできます。キーサイズとブロックサイズの間に直接の関連性がないことを示すのは良い考えです(そうでなければ、私はこのコメントでやったと思います:)) –

+0

いつものように、Maartenは私のことがより明確です! – zaph

関連する問題