무작위 8 바이트를 암호화하기 위해 이중 길이 3DES 키를 사용하고 암호화 된 값을 사용하여 새 3DES 키를 파생시킬 필요가 있습니다.DESedeKeySpec 잘못된 키 크기
DESedeKeySpec을 encryptedRandomValue로 인스턴스화하려고하면 "잘못된 키 크기"라는 오류 메시지가 나타납니다. 이 문제를 해결하는 방법을 알려 주실 수 있습니까?
DESedeKeySpec myKeySpec = 새 DESedeKeySpec (encryptedRandomValue);
내 모든 비밀 키가 단일 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, 답장을 보내 주셔서 대단히 감사합니다. 귀하의 응답에서 두 배 길이의 키를 올바르게 작성하지 않는다는 것을 이해합니다. 올바른 길이의 이중 길이 키를 얻으려면 KeyGenerator.getInstance ("DESede")를 사용하여 키를 작성해야합니다. 그 다음에 처음 8 바이트를 취하여 두 번째 8 바이트와 함께 새 바이트 []로 연결 한 다음 처음 8 바이트를 다시 생성하고 새로운 DESede SecretKey를 생성합니다. – Simplyi
예, 처음 16 바이트의 이중 길이 키와 동일한 3DES 키를 만듭니다. –
휴식을 가져 주셔서 감사합니다. 단일 DESede 키가 아니라 두 개의 별도 DES 키 (키와 키 2)를 만든 다음이 두 키를 바이트 배열로 연결하면이 바이트 중 새로운 DESede 키를 생성하려고 시도합니다. 그래도 유효한 이중 길이 3DES 키를 만들 수 있습니까? ....이 3DES 키를 사용하여 임의의 8 바이트 배열을 암호화 한 후에 위에서 예와 같이 새 3DES 키를 파생 시키려고하면 오류가 발생하지 않습니까? ... DESedeKeySpec은 24 바이트 만 사용할 수 있지만 3DES chipper의 출력은 8 바이트 뿐이고 오류가 발생합니다 ... – Simplyi