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

Я пытаюсь заменить 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);
7
задан skiphoppy 24 February 2012 в 15:50
поделиться