Я пытаюсь заменить PBEWithMD5AndDES на PBEWithMD5AndTripleDES в существующем коде. Пока я использую ту же парольную фразу, которую использовал раньше, и получаю это исключение:
java.security.InvalidKeyException: Illegal key size
Я поискал в Интернете и увидел, что DES использует 64-битный ключ, а TripleDES использует 128-битный ключ. Я не совсем понимаю, как моя кодовая фраза используется для генерации ключа, и не знаю, где искать, чтобы понять это полностью. Моя кодовая фраза состоит из 260 символов. Я пробовал удвоить длину, но получаю то же исключение.
Я генерирую PBEKeySpec из своей парольной фразы с 8-байтовой солью и числом итераций 12. Я вижу, что есть еще один конструктор, который принимает аргумент keyLength, но в документации он описывается как «должен быть производным», и я не понимаю этого. У меня есть идея, что мне нужно изменить счетчик итераций и / или предоставить аргумент keyLength, но я не хочу делать это вслепую, не полностью понимая, что я делаю.
Вот основная схема кода, который я сейчас использую:
String passphrase = ...
byte[] salt = ...
int iterationCount = 12;
String algorithm = "PBEWithMD5AndTripleDES";
KeySpec keySpec = new PBEKeySpec(passPhrase.toCharArray(), salt, iterationCount);
SecretKey key = SecretKeyFactory.getInstance(algorithm).generateSecret(keySpec);
Cipher cipher = Cipher.getInstance(key.getAlgorithm());
AlgorithmParameterSpec paramSpec = new PBEParameterSpec(salt, iterationCount);
cipher.init(Cipher.ENCRYPT_MODE, key, paramSpec);
byte[] encoded = cipher.doFinal(data);