2017-03-08 5 views
0

ランダムな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バイトデータ

答えて

2

トリプルDESは、異なるキーで行われた3つの連続した単一のDES操作です。具体的にはDES暗号化の後にDES復号化とそれに続くDES暗号化があります。

DES電子 ncrypt- D ecrypt- 電子 ncryptは二重の長さとトリプル長キーbetwheen差がキーあなたのどの部分である

それに名前DESEDEを与えるものです3つのDES操作のそれぞれで使用します。

キーのダブル長さ:k1 || k2には、次のDES操作を与えるだろう:

Encrypt(k1) - Decrypt(k2) - Encrypt(k1) 

トリプル長キー:

Encrypt(k1) - Decrypt(k2) - Encrypt(k3) 

Javaのドンで標準実装を:k1 || k2 || k3は、以下のDES操作を与えるだろうダブル長のトリプルDESキーを直接サポートしていますが、キーの最初の部分を3番目の部分として繰り返すことで同じ効果を得ることができます:k1 || k2 || k1

好奇心として、トリプルDES経由で単一のDES暗号化をサポートするには、単一のDESキーを3回繰り返します(k1 || k1 || k1など)。これは、例えば、ハードウェア実装。

+0

Ebbe、ご返信いただきありがとうございます。私はあなたの応答から、私が正しく2倍の長さのキーを作成していないことを理解しています...正しい長さのキーを取得するには、KeyGenerator.getInstance( "DESede")でキーを作成する必要があります。それから最初の8バイトを取り出し、新しいバイト[]に連結して2番目の8バイトと一緒にし、最初の8バイトを再び連結して新しいDESede SecretKeyを生成しますか? – Simplyi

+0

はい、最初の16バイトの倍長キーと同等の3DESキーが作成されます。 –

+0

あなたの休息に感謝します。 1つのDESedeキーではなく2つの別個のDESキー(キーとキー2)を作成し、これらの2つのキーをバイト配列に連結し、これらのバイトから新しいDESedeキーを生成しようとするとどうなりますか?それでも有効な倍長の3DESキーを作ることはできますか?....この3DESキーでランダムに8バイトの配列を暗号化した後、上記の例のように新しい3DESキーを派生しようとするとエラーになりませんか?DESedeKeySpecは24バイトしかかかりませんが3DESチッパーの出力は8バイトのみです...それは私にエラーを与える... – Simplyi

関連する問題