Elettracompany.com

Компьютерный справочник
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Java security invalidkeyexception

InvalidKeyException Недопустимый размер ключа

У меня есть тест, который отлично работает на моем MacBook Pro, но не запускается при непрерывной интеграции с сервером TeamCity.

Как блок разработки, так и TeamCity используют Java 1.6, а я использую библиотеку BouncyCastle для необходимости специального шифрования AES.

UPDATE

Похоже, в соответствии с выбранным ответом мне нужно что-то изменить в моей установке TeamCity, и это, возможно, повлияет на некоторые пользовательские установки — поэтому это не лучший выбор, я должен переключиться на другую криптографическую библиотеку, чтобы сделать это без ограничений. Так что, вероятно, бодрый замок поможет.

ОБНОВЛЕНИЕ 2

Я фактически перешел на использование BouncyCastle, чтобы избежать этого ограничения. Обратите внимание, что это работает, только если вы используете собственные классы BC напрямую, а не поставщик BC.

5 ответов

Эта ошибка означает, что ваша виртуальная машина Java использует политику, которая допускает только ограниченные размеры ключей шифрования из-за законов США об экспорте.

Java 9 и выше

Файлы политики неограниченной юрисдикции включены в Java 9 и используются по умолчанию (см. Обновления безопасности в Руководстве по миграции на Java 9 ).

Если вы получаете эту ошибку с Java 9, это может означать, что конфигурация политики была изменена на более строгую политику ( limited ) см. инструкции из руководства по миграции:

Файл политики юрисдикции JCE по умолчанию не ограничен

Если вашему приложению ранее требовалась криптография Java Расширение (JCE) Файлы политики неограниченной юрисдикции силы, то вы Больше не нужно скачивать или устанавливать их. Они включены в JDK и активированы по умолчанию.

Если ваша страна или использование требует более строгой политики, ограниченные файлы криптографической политики Java по-прежнему доступны.

Если у вас есть требования, которые не соответствуют ни одному из правил файлы предоставляются по умолчанию, тогда вы можете настроить эти файлы политики чтобы удовлетворить ваши потребности.

См. свойство crypto.policy Security в разделе файл /conf/security/java.security или Конфигурация криптографической стойкости в платформе Java, Standard Edition Security Developer Guide.

Java 8 и более ранние версии

Java 8 обновление 161 и выше

Начиная с Java 8, обновление 161, по умолчанию в Java 8 применяется политика неограниченной юрисдикции. Если вы получите эту ошибку, это может означать, что конфигурация была изменена на limited . См. Инструкции в следующем разделе по Java 8 Update 151 или в предыдущем разделе по Java 9, чтобы изменить его обратно на unlimited .

Java 8, обновление 151 и выше

Начиная с Java 8 Update 151, политика неограниченной юрисдикции включена в Java 8, но по умолчанию не используется. Чтобы включить его, вам нужно отредактировать файл java.security в /jre/lib/security (для JDK) или /lib/security (для JRE). Раскомментируйте (или включите) строку

Обязательно отредактируйте файл с помощью редактора, запускаемого от имени администратора.

Изменение политики вступает в силу только после перезапуска JVM (это особенно важно для долго выполняющихся серверных процессов, таких как Tomcat).

Для обеспечения обратной совместимости установка файлов политики, как описано в следующем разделе, также будет работать.

Перед обновлением Java 8 151

Для Java 8 Update 144 и более ранних версий вам необходимо установить файлы политики неограниченной юрисдикции расширения криптографии Java (JCE) (доступны по адресу Oracle ).

Чтобы установить эти файлы (из README.txt в загрузке):

Загрузите файлы политики JCE неограниченной силы.

Распакуйте и извлеките загруженный файл.

Это создаст подкаталог с именем jce. Этот каталог содержит следующие файлы:

Установите файлы JAR политики неограниченной прочности.

В случае, если вы позже решите вернуться к первоначальному «сильному», но ограниченные версии политики, сначала сделайте копию оригинального JCE файлы политики (US_export_policy.jar и local_policy.jar). затем заменить сильные файлы политики неограниченной силой версии, извлеченные на предыдущем шаге.

Стандартное местодля файлов JAR политики юрисдикции:

Примечание для JDK — в jre /lib /security.

Новый файл политики вступает в силу только после перезапуска JVM (это особенно важно для долго работающих серверных процессов, таких как Tomcat).

У меня была похожая проблема, но в моем случае произошла ошибка пути.

JAVA_HOME был jdk1.6.0_18, поэтому я поместил два баночка в jdk1.6.0_18/lib/security , но в jdk1.6.0_18 есть jre каталог. Оба файла должны были быть помещены в jdk1.6.0_18/jre/lib/security .

Помимо установки файлов политики, также убедитесь, что CUSTOMLONGSECRETKEY. getBytes() действительно создает массив из 32 байтов. Я бы использовал CUSTOMLONGSECRETKEY.getBytes(some encoding) и получил бы первые 32 байта из этого. А еще лучше: используйте весь секретный ключ, чтобы получить ключи для AES нужного вам размера.

Убедитесь, что вы знаете путь к JAVA_HOME, который используется в вашей среде IDE . Для того, чтобы скопировать на правильный путь.

Читать еще:  Error java lang illegalargumentexception

В моем случае я использую IntelliJ: /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/security

Вместо того, когда я показываю $ JAVA_HOME в консоли. /Users/myuser/.sdkman/candidates/java/current/jre/lib/security

Я столкнулся с той же проблемой для jdk 1.8.0_151 —

java.security.InvalidKeyException: недопустимый размер ключа или параметры по умолчанию в android

Я получил следующую ошибку и немного застрял: Исключение в потоке «main»

Я застрял, потому что все ответы, которые я нашел, говорят о расширении криптографии Java (JCE) , которое обычно включается в android SDK. Так что я думаю, что моя проблема не в этом.

Должно быть, я что-то забыл, но не могу найти, что именно. Возможно, мой код ошибочен (это мой первый подход к криптографии в Java, я не эксперт, и следующий код-это в основном некоторые копии учебников).

Я использую этот код для шифрования и расшифровки строки :

И следующий ключ :

Спасибо вам, ребята.

5 Ответов

private String cryptKey = «qkjll5@2md3gs5Q@FDFqf»;

По умолчанию Java поддерживает только 128-битное шифрование

128bits = = 16Bytes == 16 символов.

Таким образом, 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

  1. Файлы политики юрисдикции неограниченной силы включены в Java 9 и используются по умолчанию
  2. Начиная с 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;.

Код ниже выбрасывает это сообщение об ошибке: Exception in thread main java.security.InvalidKeyException: Illegal key size or default parameters Cipher dcipher; byte[] salt = new.

Моя программа-это симметричный криптер, который использует длину ключа 256. Когда я использую его на компьютере, на котором не установлен JCE (без длины ключа), он падает со следующей ошибкой.

Я пытаюсь зашифровать строку, используя следующий метод. этот метод успешно работал и раньше. После Windows OS патча безопасности теперь я получаю java.security.InvalidKeyException: незаконный.

String distributionDomain = d21geuebylb7j1.cloudfront.net; String privateKeyFilePath = /Users/Desktop/rsa-private-key.der; String s3ObjectKey = small.mp4; String policyResourcePath = http:// +.

Возможный Дубликат : InvalidKeyException нелегальный размер ключа public static byte[] encryptBytes(byte[] bytes, byte[] key) < Cipher cipher = null; try < cipher =.

Когда я запускаю этот код в Android, он не выдает ошибок, но когда я запускаю его в стандартной программе Java, он создает исключение: java.security.InvalidKeyException: незаконный размер ключа.

Когда длина ключа составляет 128 бит, все работает. Но я получил следующее исключение, когда я использую ключ длиной 192 или 256 бит. java.security.InvalidKeyException: Illegal key size or default.

Это моя основная программа симметричного шифрования. Как я учусь сейчас, я хочу знать, как это работает. И у меня есть следующее исключение: Исключение в потоке main.

Java security invalidkeyexception

I’m trying to implement AES 256 getting following exception.
same code is working fine for AES-128.Can any one please suggest me what to do?

Exception in thread «main» java.security.InvalidKeyException: Illegal key size or default parameters
at javax.crypto.Cipher.a(DashoA12275)
at javax.crypto.Cipher.a(DashoA12275)
at javax.crypto.Cipher.a(DashoA12275)
at javax.crypto.Cipher.init(DashoA12275)
at javax.crypto.Cipher.init(DashoA12275)
at com.mytestapp.EncryptTest.main(EncryptTest.java:28)

Thanks for replying.

can you please tell me how to proceed further?

Actually first time i’m trying to implement AES-128/AES-256.I don’t have much idea on it.

Following sample code i’m using which is working fine for AES-128 for testing purpose.If following will work for AES-256 then only i can go for real implement.

Please Help me out to resolve this issue.

import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;

public class EncryptTest <

>
public static void main(String[] args) throws Exception
<
KeyGenerator keygen = KeyGenerator.getInstance(«AES»);
// keygen.init(128); //this works fine!
keygen.init(256); //this breaks!
SecretKey aesKey = keygen.generateKey();
Cipher aesCipher;
aesCipher = Cipher.getInstance(«AES/ECB/PKCS5Padding»);
aesCipher.init(Cipher.ENCRYPT_MODE, aesKey);

byte[] clearText = «This is an example!».getBytes();

System.out.println(«ClearText: «+new String(clearText));

byte[] cipherText = aesCipher.doFinal(clearText);
System.out.println(«CipherText: «+new String(cipherText));

aesCipher.init(Cipher.DECRYPT_MODE, aesKey);
byte[] clearTextDecrypt = aesCipher.doFinal(cipherText);
System.out.println(«DecryptedText: » + new String(clearTextDecrypt));
boolean equalText = Arrays.equals(clearText, clearTextDecrypt);
if (equalText)
<
System.out.println(«String was recovered!»);
>
else
<
System.out.println(«String was NOT recovered!! Booooooo. «);
>
>

What does «this breaks» mean? If there is an exception, post it here. My guess would be that you haven’t installed the unlimited-strength JCE policy files (which are needed for AES-192 and AES-256); you can download them from the JCE pages at java.sun.com.

(Alternatively, you could use a JCE provider that doesn’t require those, like BouncyCastle. But that might be a bit beyond your current comfort zone with regards to JCE.)

Thanks for Replying.

If i’m using ASE-128 getting following exception

Exception in thread «main» java.security.InvalidKeyException: Illegal key size or default parameters
at javax.crypto.Cipher.a(DashoA12275)
at javax.crypto.Cipher.a(DashoA12275)
at javax.crypto.Cipher.a(DashoA12275)
at javax.crypto.Cipher.init(DashoA12275)
at javax.crypto.Cipher.init(DashoA12275)
at com.mytestapp.EncryptTest.main(EncryptTest.java:28)
else
above code is working fine

Sorry for Interruption.

while i’m using AES-128 My Above code is working fine

While trying to AES-256 getting following Exception

Exception in thread «main» java.security.InvalidKeyException: Illegal key size or default parameters
at javax.crypto.Cipher.a(DashoA12275)
at javax.crypto.Cipher.a(DashoA12275)
at javax.crypto.Cipher.a(DashoA12275)
at javax.crypto.Cipher.init(DashoA12275)
at javax.crypto.Cipher.init(DashoA12275)
at com.mytestapp.EncryptTest.main(EncryptTest.java:28

D:jdk1.5.0_03jrelibsecurity contains US_export_policy.jar & local_policy.jar.

still i have downloaded JCE file.

I don’t know how to use?

I gone through readme file. I am not clear in Step -3 which is

3) Install the unlimited strength policy JAR files.

To utilize the encryption/decryption functionalities of the JCE framework without any limitation, first make a copy of the original JCE policy files (US_export_policy.jar, local_policy.jar in the standard place for JCE jurisdiction policy JAR files) in case you later decide to revert to these «strong» versions. Then replace the strong policy files with the unlimited strength versions extracted in the previous step.
The standard place for JCE jurisdiction policy JAR files is:

/lib/security [Solaris]
libsecurity [Win32]

But i am using windows XP OS.

Do i need to set the CLASS PATH for this?
Do i need to copy both jar file in lib directory

But i am using windows XP OS.

«Win32» is a catch-all phrase for 32 bit Windows operating systems. That’s all of them starting with NT (so it includes XP).

Do i need to set the CLASS PATH for this?

The instructions don’t mention anything about classpaths, so, no.

Do i need to copy both jar file in lib directory

The instructions say:

Then replace the strong policy files with the unlimited strength versions extracted in the previous step.

Since there are only two files, that means all of them. 🙂

Any how after struggling lot Now i am able to implement AES-256 for same application.

Thanks for your guidiance,support,and co-operation.

I have generated key using ECDH algorithm and when i used this key for AES encryption,i am getting following errors,i am using Bouncy castle jdk1.6 package.

aShared: 199694d7f0cf0867e4843ffb89e8181cd6b5922e7d68472b32adb5ff68df4dc4
Exception in thread «main» java.security.InvalidKeyException: Illegal key size or default parameters
bShared: 199694d7f0cf0867e4843ffb89e8181cd6b5922e7d68472b32adb5ff68df4dc4
at javax.crypto.Cipher.a(DashoA13*..)
at javax.crypto.Cipher.init(DashoA13*..)
at javax.crypto.Cipher.init(DashoA13*..)
at BasicECDHExample.main(BasicECDHExample.java:75)
Java Result: 1

How should i solve this errors.

hi,
when i am using key size of 128 bits for AES i am getting out put. but when i used 192,256 bit key i am getting illegal key size.. i am working in (IDE) NETBEANS.I have downloaded unlimited jurisdiction policy files and added to my library but still i am getting invalid key size. how to solve this. i am using(bouncycastle jdk1.6 package).

Exception in thread «main» java.security.InvalidKeyException: Illegal key size
at javax.crypto.Cipher.a(DashoA13*..)
at javax.crypto.Cipher.init(DashoA13*..)

hi here is the code.

import java.security.Security;
import javax.crypto.spec.SecretKeySpec;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;

public class BasicECDHExample <

public static void main(
String[] args)
throws Exception <
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
byte[] input = new byte[] < 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f >;
//key generated by ecdh
byte[] key1 = new byte[] < 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e>;
byte[] ivBytes = new byte[] <
0x00, 0x01, 0x02, 0x03, 0x00, 0x01, 0x02, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 >;

System.out.println(«input: «+getHexString(input));
Cipher cipher = Cipher.getInstance(«AES/CTR/NoPadding», «BC»);

// encryption step
SecretKeySpec key = new SecretKeySpec(key1,»AES»);
IvParameterSpec ivSpec = new IvParameterSpec(ivBytes);

//SecretKeySpec key1 = new SecretKeySpec(key,»AES»);

byte[] cipherText = cipher.doFinal(input);
System.out.println(«cipher: «+getHexString(cipherText));
// decryption step

byte[] plainText = cipher.doFinal(cipherText);

public static String getHexString(byte[] b) throws Exception <
String result = «»;
for (int i = 0; i Nov 06, 2009 09:17:32

Please edit your post to UseCodeTags. It’s unnecessarily hard to read the code as it is, making it less likely that people will bother to do so.

«key1» has 30 bytes = 240 bits. That’s not a valid key size for AES.

hi, even when i used a valid key of 192 bit or 256 bits i am getting error as invalid key size.
code:
byte[] key1 = new byte[] < 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0x08>;

Exception in thread «main» java.security.InvalidKeyException: Illegal key size
at javax.crypto.Cipher.a(DashoA13*..)
at javax.crypto.Cipher.init(DashoA13*..)

BasicECDHExample.java:32: cannot find symbol
symbol : variable sr
location: class BasicECDHExample
cipher.init(Cipher.ENCRYPT_MODE,key,ivSpec,sr);

sr is secured random variable generator. remove the sr.. ie

cipher.init(Cipher.ENCRYPT_MODE,key,ivSpec);
then see whether it works for 192 0r 256 bit key.

Yes, it works fine.

What do you mean by «I have downloaded unlimited jurisdiction policy files and added to my library» — where did you put those files?

java.security.InvalidKeyException: Illegal key size or default parameters in android

December 2018

63.8k раз

Я получил следующее сообщение об ошибке, и я немного застрял: Exception в потоке «основной»

Я застрял , потому что ответы на все вопросы , я нашел разговор о Java Cryptography Extension (JCE) , который нормально включен в Android SDK. Так что я думаю , что моя проблема не в этом один.

Должно быть, я что-то забыл, но я не могу найти что. Может быть, мой код неправильно (это мой первый подход криптографии в Java, я не эксперт, и следующий код в основном некоторые копии пасты учебных пособий).

Я использую этот код, чтобы склеп и расшифровать строку:

И следующий ключ:

Спасибо вам, ребята.

5 ответы

По умолчанию JDK поддерживает шифрование только с помощью 128-битных ключей becuase американских ограничений. Таким образом, чтобы поддерживать шифрование с 256 битной длинной ключа, мы должны заменить local_policy.jar и US_export_policy.jars в $ / Java-8-оракула / JRE папку / безопасности JAVA_HOME / Lib в противном случае он будет давать java.security.InvalidKeyException: Illegal размер ключа или дефолт

Обе банки и детальная концепция может быть понять из ссылки:

Спасибо, Сулабская Jain

private String cryptKey = «[email protected]@FDFqf»;

По умолчанию Java поддерживает только 128-битное шифрование

128bits == 16Bytes == 16 символов.

Так cryptKey не может превышать 16 символов.

Если вы хотите , чтобы превышать более чем 16 символов , вы должны установить Java Cryptography Extension (JCE) безграничную силу .

Там было обновление с момента Java 8/9

  1. Файлы политики Безлимитный Strength Юрисдикция включены Java 9 и используется по умолчанию
  2. Начиная с Java 8 Update 161 , Java 8 по умолчанию в безграничную силу политики юрисдикции.

Начиная с Java 8 Update 151 , Неограниченный Политика Strength Юрисдикция входит в Java 8 , но не используется по умолчанию. Чтобы включить ее, вам нужно отредактировать файл java.security в /jre/lib/security (для JDK) или /lib/security (для JRE). Раскоментируйте (или включать) линия

Убедитесь, что вы измените файл с помощью редактора запуска от имени администратора. Изменение политики вступает в силу только после перезапуска виртуальной машины Java

До Java 8 Update 151 , вам необходимо скачать JCE Безлимитный Strength файлы политики юрисдикции и заменить.

Это код единственным решением. Нет необходимости загружать или возиться с файлами конфигурации.

Это решение на основе отражения, протестирован на Java-

Вызовите этот метод один раз, в начале вашей программы или в то время как приложение начинается.

Вы можете удалить максимальное ключевое ограничение, заменив существующие банки JCE с банками политики неограниченной силы.

( / USR / libexec / java_home -v , чтобы найти java_home в Mac)

Ссылка на основную публикацию
Adblock
detector