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

Спасибо, Сулабб Джайн