Исключение в потоке "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>/

Ответ 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