Java.security.InvalidKeyException: недопустимый размер ключа или параметры по умолчанию в android
Я получил следующую ошибку, и я немного застрял:
Исключение в потоке "main"
java.security.InvalidKeyException: Illegal key size or default parameters
at javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1011)
at javax.crypto.Cipher.implInit(Cipher.java:786)
at javax.crypto.Cipher.chooseProvider(Cipher.java:849)
at javax.crypto.Cipher.init(Cipher.java:1213)
at javax.crypto.Cipher.init(Cipher.java:1153)
at net.nakou.indie.wtext.engineClass.Session.cryptString(Session.java:52)
Я застрял, потому что все ответы, которые я нашел, говорят о Java Расширении криптографии (JCE), которые обычно включаются в SDK android. Поэтому я думаю, что моя проблема не в этом.
Я, должно быть, что-то забыл, но я не могу найти что. Может быть, мой код ошибочен (это мой первый подход криптографии в Java, я не эксперт, а следующий код - это в основном некоторые копии папок).
Я использую этот код для шифрования и расшифровки строки:
public String cryptString(String s) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, UnsupportedEncodingException, BadPaddingException, IllegalBlockSizeException {
byte[] KeyData = this.cryptKey.getBytes();
SecretKeySpec KS = new SecretKeySpec(KeyData, "Blowfish");
Cipher cipher = Cipher.getInstance("Blowfish");
cipher.init(Cipher.ENCRYPT_MODE, KS);
String ret = new String(cipher.doFinal(s.getBytes("UTF-8")));
return ret;
}
public String decryptString(byte[] s) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
byte[] KeyData = this.cryptKey.getBytes();
SecretKeySpec KS = new SecretKeySpec(KeyData, "Blowfish");
Cipher cipher = Cipher.getInstance("Blowfish");
cipher.init(Cipher.DECRYPT_MODE, KS);
String ret = new String(cipher.doFinal(s));
return ret;
}
И следующий ключ:
private String cryptKey = "[email protected]@FDFqf";
Спасибо, ребята.
Ответы
Ответ 1
private String cryptKey = "[email protected]@FDFqf";
По умолчанию Java поддерживает только 128-битное шифрование
128bits == 16Bytes == 16 Chars.
So cryptKey
не может превышать 16 символов.
Если вы хотите превысить более 16 символов, вы должны установить расширение Java Cryptography Extension (JCE) неограниченную силу.
Почему 128 бит?
Ответ 2
По умолчанию JDK поддерживает шифрование только через 128-битные ключи из-за американских ограничений. Поэтому для поддержки шифрования с использованием 256-битного ключа мы должны заменить local_policy.jar и US_export_policy.jars в папке $JAVA_HOME/java-8-oracle/jre/lib/security, иначе он даст java.security.InvalidKeyException: размер нелегального ключа или по умолчанию
Как банки, так и детальная концепция могут быть поняты по ссылке:
easybook4u.com
Спасибо,
Сулабб Джайн