Мне нужно использовать ключ 3DES двойной длины для шифрования случайных 8 байтов, а затем использовать зашифрованное значение для получения нового ключа 3DES.
Когда я пытаюсь создать экземпляр DESedeKeySpec с зашифрованным RandomValue, я получаю сообщение об ошибке «Неверный размер ключа». Можете ли вы посоветовать мне, как решить эту проблему?
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 байтов данных...