ランダムな8バイトを暗号化するために倍長の3DESキーを使用し、暗号化された値を使用して新しい3DESキーを取得する必要があります。DESedeKeySpec間違った鍵のサイズ
DESedeKeySpecをencryptedRandomValueでインスタンス化しようとすると、「間違ったキーサイズ」というエラーメッセージが表示されます。この問題を解決する方法を教えてもらえますか?
DESedeKeySpec myKeySpec =新しいDESedeKeySpec(encryptedRandomValue);
私のSecretKeysがすべて単一のDESキーである場合、このエラーが発生するのを避けることができます。しかし、私は二重の長さの3DESキーとECBモードを使用する必要があります。ここで
は私のコードです。
// Generate double length 3DES Master Key
KeyGenerator masterEncKeyGenerator = KeyGenerator.getInstance("DESede");
masterEncKeyGenerator.init(112);
SecretKey masterKey = masterEncKeyGenerator.generateKey();
//Prepare random bytes
byte[] randomKeyValue = "rn4yrbdy".getBytes();
// Encrypt random bytes with the 3DES Master key
final Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, masterKey);
byte[] encryptedRandomValue = cipher.doFinal(randomKeyValue);
// Derive new key 3DES Key
SecretKeyFactory mySecretKeyFactory = SecretKeyFactory.getInstance("DESede");
DESedeKeySpec myKeySpec = new DESedeKeySpec(encryptedRandomValue);
SecretKey derivedKey = mySecretKeyFactory.generateSecret(myKeySpec);
なぜこのエラーが発生しているのかがわかります。それはDESedeKeySpecが鍵の素材として24バイトを取り込む必要があるからですが、私はそれを8にしています。しかし、それは私が持っている必要条件です:暗号化された3DESキーをマスタ3DESキー、ランダム8バイトデータ
Ebbe、ご返信いただきありがとうございます。私はあなたの応答から、私が正しく2倍の長さのキーを作成していないことを理解しています...正しい長さのキーを取得するには、KeyGenerator.getInstance( "DESede")でキーを作成する必要があります。それから最初の8バイトを取り出し、新しいバイト[]に連結して2番目の8バイトと一緒にし、最初の8バイトを再び連結して新しいDESede SecretKeyを生成しますか? – Simplyi
はい、最初の16バイトの倍長キーと同等の3DESキーが作成されます。 –
あなたの休息に感謝します。 1つのDESedeキーではなく2つの別個のDESキー(キーとキー2)を作成し、これらの2つのキーをバイト配列に連結し、これらのバイトから新しいDESedeキーを生成しようとするとどうなりますか?それでも有効な倍長の3DESキーを作ることはできますか?....この3DESキーでランダムに8バイトの配列を暗号化した後、上記の例のように新しい3DESキーを派生しようとするとエラーになりませんか?DESedeKeySpecは24バイトしかかかりませんが3DESチッパーの出力は8バイトのみです...それは私にエラーを与える... – Simplyi