Java.security.InvalidKeyException: Tamaño de clave no válida o parámetros predeterminados en android
Tengo el siguiente error y me quedé un poco atascado: Excepción en el hilo "principal"
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)
Estoy atascado porque todas las respuestas que he encontrado hablan de la extensión de Java Cryptography (JCE) que normalmente se incluyen en el androide SDK. Así que creo que mi problema no es éste.
- Grabación de vídeo de la aplicación Android cuando la pantalla está desactivada
- ContentProvider con varias tablas
- Cadena está siendo truncado cuando es demasiado largo
- Localización de recursos en la aplicación android
- set androide del mapbox de la imagen de la demostración
Debo haber olvidado algo, pero no puedo encontrar qué. Tal vez mi código es incorrecto (es mi primer enfoque de la criptografía en Java, no soy un experto, y el siguiente código es en su mayoría algunos copy-pastes de tutoriales).
Yo uso este código para criptar y descifrar una cadena:
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; }
Y la siguiente clave:
private String cryptKey = "qkjll5@2md3gs5Q@FDFqf";
Gracias chicos.
- Android - SQLite - SELECCIONAR ENTRE Fecha1 Y Fecha2
- Mejor manera de determinar si existe un valor en el feed de JSON
- Android appCompat problema con samsung y wiko
- Obtener OnActivityResult al volver de startActivityForResult en Adapter
- ¿Por qué se debe cerrar OutputStream después de inputtream en android
- Copiar directorio, sub directorios y archivos a la tarjeta sd - android
- Cómo generar clase java simple de WSDL?
- ¿Cómo uso eficazmente un bus de eventos?
private String cryptKey = "qkjll5@2md3gs5Q@FDFqf";
De forma predeterminada, Java sólo admite cifrado de 128 bits
128bits == 16Bytes == 16 Chars.
Así que cryptKey
no puede tener más de 16 caracteres.
Si desea superar más de 16 caracteres, debe instalar Java Criptography Extension (JCE) Unlimited Strength .
¿Por qué 128bits?