16バイトの配列キーマテリアルを使用してJavaで倍長の3DESキーを作成し、メッセージで暗号化して16バイト長の配列に戻す必要があります。私は24バイトではなく16バイトで動作するようになっています...Javaでダブルレングス3DESで暗号化して16バイトの配列暗号を生成
DESedeは16バイトの長さの鍵素材で倍長の3DESキーを生成する唯一の方法であるため、24バイト[ DESedeインスタンスを使用して、最後に最初の8バイトを追加して長さを増やして、24バイトを取得します。そう:
byte[] keyMaterial = // Assume this one is 16 bytes.
byte[] newKeyBytes = ByteBuffer.wrap(new byte[ 24 ])
.put(Arrays.copyOfRange(keyMaterial, 0, 16))
.put(Arrays.copyOfRange(keyMaterial, 0, 8))
.array();
SecretKeyFactory mySecretKeyFactory = SecretKeyFactory.getInstance("DESede");
KeySpec myKeySpec = new DESedeKeySpec(newKeyBytes);
SecretKey encryptionKey = mySecretKeyFactory.generateSecret(myKeySpec);
私は自分のDESedeキーを持っていますが、私はそれを使って次のようにメッセージを暗号化します。また、私は「ECB」モードを使用する必要があります。
Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, encryptionKey);
byte[] returnValue = cipher.doFinal(dataToEncrypt)
をしかし、結果として、私は戻って24バイト配列ではなく、16バイト配列を取得し、私は24バイト配列を暗号化していますので、これはあると思います。
24バイトではなく16バイトの長さの3DES SecretKeyを作成する方法はありますか?または24バイトのSecretKeyで暗号化する場合は、24バイトではなく16バイトの暗号化されたメッセージを戻しますか?
ありがとうございました!
これは正しいです。キーサイズはブロックサイズとほとんど関係がありません。キーサイズの暗号化は結果に反映されません*。 **もっと深くなる**:明らかに、ブロックサイズの倍数であるキーサイズを持つことは、例えば*キー(暗号化)キー自体をラップするときなど、まだ有効です。これはAES-192の欠点の1つです。それはブロックサイズの1.5倍です - それを考慮しないのに十分な理由がよくあります。 –