我需要使用双倍长度的 3DES 密钥来加密随机的 8 个字节,然后使用加密的值来派生一个新的 3DES 密钥。
当我尝试使用 encryptedRandomValue 实例化 DESedeKeySpec 时,我收到一条错误消息“密钥大小错误”。你能告诉我如何解决这个问题吗?
DESedeKeySpec myKeySpec = new DESedeKeySpec(encryptedRandomValue);
如果我所有的 SecretKey 都是单个 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 字节数据......