Какой размер ключа для PBEWithMD5AndTripleDES?

Я пытаюсь заменить PBEWithMD5AndDES на PBEWithMD5AndTripleDES в существующем коде. До сих пор я использую ту же фразу-пароль, что и раньше, и получаю следующее исключение:

java.security.InvalidKeyException: недопустимый размер ключа

Я посмотрел онлайн и увидел, что 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);

Ответы на вопрос(2)

Ваш ответ на вопрос