Java security invalidkeyexception
java.security.Inval >
Я получил следующую ошибку и немного застрял: Исключение в потоке «main»
Я застрял, потому что все ответы, которые я нашел, говорят о расширении криптографии Java (JCE) , которое обычно включается в android SDK. Так что я думаю, что моя проблема не в этом.
Должно быть, я что-то забыл, но не могу найти, что именно. Возможно, мой код ошибочен (это мой первый подход к криптографии в Java, я не эксперт, и следующий код-это в основном некоторые копии учебников).
Я использую этот код для шифрования и расшифровки строки :
И следующий ключ :
Спасибо вам, ребята.
5 Ответов
private String cryptKey = «qkjll5@2md3gs5Q@FDFqf»;
По умолчанию Java поддерживает только 128-битное шифрование
Таким образом, cryptKey не может превышать 16 символов.
Default JDK поддерживает шифрование только через 128-битные ключи из-за американских ограничений. Поэтому для поддержки шифрования с 256-битным ключом мы должны заменить local_policy.jar и US_export_policy.jars в папке $JAVA_HOME/java-8-oracle/jre/lib/security, иначе это даст java.security.InvalidKeyException: нелегальный размер ключа или значение по умолчанию
Как с банками, так и с детальной концепцией можно ознакомиться по ссылке:
Спасибо, Сулабх Джейн
Там были обновления с Java 8/9
- Файлы политики юрисдикции неограниченной силы включены в Java 9 и используются по умолчанию
- Начиная с Java 8 Update 161, Java 8 по умолчанию использует политику юрисдикции неограниченной силы.
Начиная с Java 8 Update 151 , политика юрисдикции неограниченной силы включена в Java 8, но не используется по умолчанию. Чтобы включить его, вам нужно отредактировать файл java.security в /jre/lib/security (для JDK) или /lib/security (для JRE). Раскомментируйте (или включите) строку
Убедитесь, что вы редактируете файл с помощью редактора, запущенного от имени администратора. Изменение политики вступает в силу только после перезапуска JVM
Перед обновлением Java 8 151 вам необходимо загрузить файлы политики юрисдикции JCE Unlimited Strength и заменить их.
PS: выше ссылка идет на мой личный блог, который имеет дополнительную информацию.
Это решение только для кода. Нет необходимости загружать или возиться с конфигурационными файлами.
Это решение, основанное на отражении, протестировано на java 8
Вызовите этот метод один раз, в начале работы программы или во время запуска приложения.
Вы можете удалить максимальное ограничение ключа, заменив существующие банки JCE на банки политики неограниченной прочности.
( /usr/libexec/java_home-v, чтобы найти Java_HOME в Mac)
Скопируйте local_policy.jar и US_export_policy.jar , извлеченные из файла zip выше, в файл $JAVA_HOME/jre/lib/security
Похожие вопросы:
Привет, когда я пытаюсь добавить алгоритм шифрования защиты Sym в конфигурации spring ws, он дает следующее исключение : Caused by: org.apache.ws.security.WSSecurityException: Cannot encrypt data;.
Моя программа-это симметричный криптер, который использует длину ключа 256. Когда я использую его на компьютере, на котором не установлен JCE (без длины ключа), он падает со следующей ошибкой.
Когда длина ключа составляет 128 бит, все работает. Но я получил следующее исключение, когда я использую ключ длиной 192 или 256 бит. java.security.InvalidKeyException: Illegal key size or default.
Это моя основная программа симметричного шифрования. Как я учусь сейчас, я хочу знать, как это работает. И у меня есть следующее исключение: Исключение в потоке main.