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.

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.

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?

  • Android: detectar el brillo (cantidad de luz) en el entorno del teléfono con la cámara?
  • Implementación parcelable con ArrayList <objeto personalizado>
  • ¿Cómo implementar una pantalla de bienvenida con una barra de progreso? androide
  • ¿Por qué no puedo anular onConfigurationChanged (Configuration)?
  • Serialización Gson dependiendo del valor del campo
  • Error en algunos dispositivos - no se pudo encontrar la clase 'com.google.android.gms.measurement.internal.zzz'
  • ¿Cómo anotación @Inject sabría qué clase concreta instanciar en la misma interfaz?
  • Generación de coeficientes de filtro DSP en C / Java para convolución en el dominio del tiempo
  • Android, cámara frontal y posterior Orientación, Paisaje
  • ¿Cómo puedo instanciar un objeto java utilizando JNI (Delphi)
  • Diferencia de regex de Java y Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.