Исключение в потоке "main" java.security.InvalidKeyException: недопустимый размер ключа или параметры по умолчанию
Подсказки кода вызывают это сообщение об ошибке:
Exception in thread "main" java.security.InvalidKeyException: Illegal key size or default parameters
Cipher dcipher;
byte[] salt = new String("12345678").getBytes();
int iterationCount = 1024;
int keyStrength = 256;
SecretKey key;
byte[] iv;
Decrypter(String passPhrase) throws Exception {
SecretKeyFactory factory = SecretKeyFactory
.getInstance("PBKDF2WithHmacSHA1");
System.out.println("factory +" + factory);
KeySpec spec = new PBEKeySpec(passPhrase.toCharArray(), salt,
iterationCount, keyStrength);
System.out.println("spec " + spec);
SecretKey tmp = factory.generateSecret(spec);
System.out.println();
key = new SecretKeySpec(tmp.getEncoded(), "AES");
dcipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
}
public String encrypt(String data) throws Exception {
dcipher.init(Cipher.ENCRYPT_MODE, key);
AlgorithmParameters params = dcipher.getParameters();
iv = params.getParameterSpec(IvParameterSpec.class).getIV();
byte[] utf8EncryptedData = dcipher.doFinal(data.getBytes());
String base64EncryptedData = new sun.misc.BASE64Encoder()
.encodeBuffer(utf8EncryptedData);
System.out.println("IV "
+ new sun.misc.BASE64Encoder().encodeBuffer(iv));
System.out.println("Encrypted Data " + base64EncryptedData);
return base64EncryptedData;
Кто-нибудь знает, почему я получаю эту ошибку?
Ответы
Ответ 1
Вероятно, вы еще не установили файл политики JCE.
Скачать этот файл:
И установите файл в ${java.home}/jre/lib/security/.
${java.home}
относится к вашей установочной директории Java
для mac:
- открытый поиск
- нажмите command + shift + g
- type
/Library/Java/JavaVirtualMachines
- перейдите к своей версии JDK
- затем
Contents/Home/jre/lib/security
- разархивируйте загруженный файл и разместите здесь все файлы.
для CLI
unzip downloaded_policy_file.zip -d /Library/Java/JavaVirtualMachines/<JDK_VERSION>/Contents/Home/jre/lib/security/
mv /Library/Java/JavaVirtualMachines/<JDK_VERSION>/Contents/Home/jre/lib/security/UnlimitedJCEPolicyJDK<VERSION>/* /Library/Java/JavaVirtualMachines/<JDK_VERSION>/Contents/Home/jre/lib/security
rm -rf Library/Java/JavaVirtualMachines/<JDK_VERSION>/Contents/Home/jre/lib/security/UnlimitedJCEPolicyJDK<VERSION>/
Ответ 2
Загрузите JCE для Java 7 по этой ссылке
http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html
и откройте путь C:\Program Files\Java\jdk1.7.0_80\jre\lib\security
и вставьте здесь два баночки. (Даже если бы две банки уже были заменены этими двумя банками)
Ответ 3
Для JAVA 7 ссылка для скачивания jce-7-download
Скопируйте два загруженных jars в Java\jdk1.7.0_10\jre\lib\security
Возьмите резервную копию старых банок, чтобы быть на более безопасной стороне.
Ответ 4
Если вы используете Mac с homebrew
brew cask install jce-unlimited-strength-policy
Ответ 5
С JDK 1.8u151 нет необходимости загружать библиотеки JCE отдельно. Просто отредактируйте:
$JDK_HOME/jre/lib/security/java.security
и раскомментируйте строку:
crypto.policy=unlimited