Я задавал вопрос об этом ранее, но он не получил правильного ответа и ни к чему не привел.
Итак, я прояснил несколько деталей по проблеме, и мне бы очень хотелось услышать ваши идеи о том, как я могу это исправить или что я должен попробовать.
У меня установлена Java 1.6.0.12 на моем сервере Linux, и код ниже работает просто отлично.
String key = "av45k1pfb024xa3bl359vsb4esortvks74sksr5oy4s5serondry84jsrryuhsr5ys49y5seri5shrdliheuirdygliurguiy5ru";
try {
Cipher c = Cipher.getInstance("ARCFOUR");
SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "ARCFOUR");
c.init(Cipher.DECRYPT_MODE, secretKeySpec);
return new String(c.doFinal(Hex.decodeHex(data.toCharArray())), "UTF-8");
} catch (InvalidKeyException e) {
throw new CryptoException(e);
}
Сегодня я установил Java 1.6.0.26 на своем сервере, и когда я пытаюсь запустить свое приложение, я получаю следующее исключение. Я предполагаю, что это как-то связано с конфигурацией установки Java, потому что она работает в первой, но не работает в более поздней версии.
Caused by: java.security.InvalidKeyException: Illegal key size or default parameters
at javax.crypto.Cipher.a(DashoA13*..) ~[na:1.6]
at javax.crypto.Cipher.a(DashoA13*..) ~[na:1.6]
at javax.crypto.Cipher.a(DashoA13*..) ~[na:1.6]
at javax.crypto.Cipher.init(DashoA13*..) ~[na:1.6]
at javax.crypto.Cipher.init(DashoA13*..) ~[na:1.6]
at my.package.Something.decode(RC4Decoder.java:25) ~[my.package.jar:na]
... 5 common frames omitted
Строка 25 :
c.init(Cipher.DECRYPT_MODE, secretKeySpec);
Примечания:
* java.security в java-каталоге сервера 1.6.0.12 почти полностью соответствует файлу java.security 1.6.0.26. В первом нет дополнительных провайдеров.
* Предыдущий вопрос здесь .
Caused by: java.security.InvalidKeyException: Illegal key size
(без «или параметров по умолчанию») в Java 8Ответы:
Скорее всего, у вас сейчас не установлен файл неограниченной силы.
Вам может понадобиться скачать этот файл:
Файлы политик юрисдикции с неограниченной силой расширения Java Cryptography Extension (JCE) 6
Расширение Java Cryptography Extension (JCE) Файлы политики неограниченной юрисдикции 7 Загрузить
Расширение Java Cryptography Extension (JCE) Файлы политики неограниченной юрисдикции 8 Загрузить (требуется только для версий до Java 8 u162)
Извлеките файлы фляги из почтового индекса и сохраните их в
${java.home}/jre/lib/security/
.источник
Java/jre/lib/security
,Java/jdk/lib/security
иJava/jdk/jre/lib/security
. Запуск 'java -version' возвращает ожидаемые детали.Файлы юрисдикции JRE / JDK / Java 8 можно найти здесь:
Расширение Java Cryptography Extension (JCE) Файлы политики неограниченной юрисдикции 8 Загрузить
Как сказал Джеймс выше:
установите файлы в
${java.home}/jre/lib/security/
.источник
Для JAVA 7 ссылка для скачивания jce-7-download
Скопируйте два скачанных файла jar в Java \ jdk1.7.0_10 \ jre \ lib \ security
Сделайте резервную копию старых чтобы они были более безопасными.
Для JAVA 8 ссылка для скачивания - jce-8-download.
Скопируйте загруженные файлы jar в Java \ jdk1.8.0_45 \ jre \ lib \ security.
Сделайте резервную копию старых файлов jar, чтобы быть на более безопасной стороне.
источник
В Java 9, Java 8u161 , Java 7u171 и Java 6u181 ограничение теперь отключено по умолчанию. Смотрите проблему в Java Bug Database .
Начиная с Java 8u151 вы можете программно отключить ограничение.
Вместо этого вы можете теперь вызвать следующую строку перед первым использованием классов JCE (т.е. предпочтительно сразу после запуска приложения):
источник
Это решение только для кода . Не нужно скачивать или связываться с файлами конфигурации.
Это решение на основе отражения, протестировано на Java 8
Вызовите этот метод один раз, в начале вашей программы.
// Импорт
// метод
Кредиты: Delthas
источник
"Файлы политики юрисдикции неограниченной силы расширения Java Cryptography Extension (JCE) 6"
http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html
источник
Я столкнулся с той же ошибкой при использовании Windows 7 x64, Eclipse и JDK 1.6.0_30. В папке установки JDK есть
jre
папка. Это сначала отбросило меня, когда я безуспешно добавлял вышеупомянутые jar-файлы в папку lib / security JDK. Полный путь:Загрузите и извлеките файлы, содержащиеся в
jce
папке этого архива, в эту папку.источник
В Java по умолчанию AES поддерживает 128-битный ключ, если вы планируете использовать 192-битный или 256-битный ключ, java complier выдаст исключение недопустимого размера ключа, которое вы получаете.
Решение, как предложил Виктор и Джеймс, вам нужно будет загрузить JCE (Java Cryptography Extension) в соответствии с вашей версией JRE (java6, java7 или java8).
Почтовый индекс JCE содержит следующие JAR:
Вам необходимо заменить эти банки
<JAVA_HOME>/jre/lib/security
. если вы работаете в системе Unix, вероятно, будет ссылаться на/home/urs/usr/lib/jvm/java-<version>-oracle/
Иногда простая замена local_policy.jar, US_export_policy.jar в папке security не работает на unix, поэтому я предлагаю сначала скопировать папку security на рабочий стол, заменить папку jar @ Desktop / security, удалить папку security из / jre / lib / & переместите папку безопасности рабочего стола в / jre / lib /.
напр .: sudo mv security
/usr/lib/jvm/java-7-oracle/jre/lib
источник
Там очень краткое обсуждение того , что , как представляется, этот вопрос здесь . Страница, на которую она ссылается, кажется, пропала, но один из ответов может быть тем, что вам нужно:
источник
US_export_policy.jar
иlocal_policy.jar
в моем Lib / папку безопасности уже когда - то я установил Java .. И я не смог найти ядро / Библиотека / ОКО кстати в моей папке установки Java.проблема заключается в содержимом файла default_local.policy в local_policy.jar в папке jre \ lib \ security , если вы устанавливаете JRE:
если вам не нужны действующие настройки по всему миру, вы можете просто отредактировать этот файл и изменить его содержимое на
это то, что получится, если вы загрузите JCE из Oracle.
источник
Я также получил проблему, но после замены существующего загруженным (от JCE), один решил проблему. Новые крипто файлы предоставили неограниченную силу.
источник
По умолчанию Java поддерживает только 128-битный (16 байт) размер ключа AES для шифрования. Если вам не нужно больше, чем поддерживается по умолчанию, вы можете обрезать ключ до нужного размера перед использованием
Cipher
. См Javadoc для поддерживаемых ключей по умолчанию.Это пример генерации ключа, который будет работать с любой версией JVM без изменения файлов политики. Используйте по своему усмотрению.
Вот хорошая статья о том, имеют ли значение ключи от 128 до 256 ключей в блоге AgileBits
источник
Начиная с Java 9 или 8u151, вы можете использовать комментарий строки в файле:
И изменить:
в
источник
Если вы используете дистрибутив Linux с apt и добавили webupd8 PPA, вы можете просто запустить команду
Другие обновления:
Начиная с Java 8 Update 151 , политика неограниченной юрисдикции включена в Java 8, но по умолчанию не используется. Чтобы включить его, вам нужно отредактировать файл java.security в
<java_home>/jre/lib/security
(для JDK) или<java_home>/lib/security
(для JRE). Раскомментируйте (или включите) строкуcrypto.policy=unlimited
Убедитесь, что вы редактируете файл с помощью редактора, запускаемого от имени администратора. Изменение политики вступает в силу только после перезапуска JVM
До Java 8 Обновление 151 остальные ответы остаются в силе. Загрузите файлы политики неограниченной юрисдикции JCE и замените их.
Для получения более подробной информации вы можете обратиться к моему личному сообщению в блоге ниже - Как установить файлы политик неограниченной юрисдикции Java Cryptography Extension (JCE)
источник
Есть два варианта решения этой проблемы
Вариант № 1: использовать сертификат с меньшей длиной RSA 2048
вариант № 2: вы будете обновлять два jar-файла в
jre\lib\security
любом используемом java http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.htmlили вы используете IBM websphere или любой сервер приложений, который использует его Java. основная проблема, с которой я столкнулся, я использовал сертификацию с максимальной длиной, когда я развернул уши на веб-сфере, выдается то же исключение
я обновил вложенную папку Java в websphere двумя банками https://www14.software.ibm.com/webapp/iwm/web/reg/pick.do?source=jcesdk&lang=en_US
Вы можете проверить ссылку в ссылке https://www-01.ibm.com/support/docview.wss?uid=swg21663373
источник
Убедитесь, что вы используете последнюю версию JDK / JRE .
В моем случае я поместил JCE в папку JRE, но это не помогло. Это произошло потому, что я запускал свой проект из IDE напрямую (используя JDK).
Затем я обновил JDK и JRE до последней версии (1.8.0_211), и проблема исчезла.
Более подробно: https://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8170157
источник
JDK по умолчанию поддерживает шифрование только через 128-битные ключи из-за американских ограничений. Таким образом, для поддержки шифрования из 256-битного ключа мы должны заменить его
local_policy.jar
иUS_export_policy.jars
в$JAVA_HOME/java-8-oracle/jre/lib/security
папке, иначе это даст:источник
Вы должны пойти туда
/jdk1.8.0_152 | / JRE | / lib | / безопасность | java.security и раскомментируйте
в
источник