vernam numeros metodo mensaje librerias encriptar desencriptar descifrar criptografia como cifrar cifrado java exception static encryption

numeros - librerias de criptografia en java



Java: paquete de cifrado(cifrar y descifrar). error clave no vĂ¡lida (2)

AES-256 (y AES-192) requieren los archivos de política de jurisdicción de fuerza ilimitada (uno para las últimas descargas en http://java.sun.com/javase/downloads/index.jsp ) para ser instalados para el JRE. Al no contar con este soporte, se generará la InvalidKeyException al intentar usar claves de 192 o 256 bits, como en su clase.

El tamaño de clave máximo permitido para AES sin fuerza ilimitada se documenta en la Guía de referencia de JCA para Java 6 , y por esto pasa a ser de 128 bits.

Estoy haciendo una clase con métodos estáticos para cifrar y descifrar un mensaje usando javax.crypto. Tengo 2 métodos estáticos que usan ecipher y dcipher para hacer lo que se supone que deben hacer. Necesito inicializar algunas variables (que también son estáticas). Pero cuando intento usarlo obtengo InvalidKeyException con los parámetros que le doy a ecipher.init (...). No puedo encontrar por qué. Aquí está el código:

private static byte[] raw = {-31, 17, 7, -34, 59, -61, -60, -16, 26, 87, -35, 114, 0, -53, 99, -116, -82, -122, 68, 47, -3, -17, -21, -82, -50, 126, 119, -106, -119, -5, 109, 98}; private static SecretKeySpec skeySpec; private static Cipher ecipher; private static Cipher dcipher; static { try { skeySpec = new SecretKeySpec(raw, "AES"); // Instantiate the cipher ecipher = Cipher.getInstance("AES"); dcipher = Cipher.getInstance("AES"); ecipher.init(Cipher.ENCRYPT_MODE, skeySpec); dcipher.init(Cipher.DECRYPT_MODE, skeySpec); } catch (NoSuchAlgorithmException e) { throw new UnhandledException("No existe el algoritmo deseado", e); } catch (NoSuchPaddingException e) { throw new UnhandledException("No existe el padding deseado", e); } catch (InvalidKeyException e) { throw new UnhandledException("Clave invalida", e); } }


De SecretKeySpec doc:

Este constructor no verifica si los bytes dados de hecho especifican una clave secreta del algoritmo especificado. Por ejemplo, si el algoritmo es DES, este constructor no verifica si la clave tiene una longitud de 8 bytes, y tampoco comprueba si hay claves débiles o semi débiles. Para que se realicen esas comprobaciones, se debe utilizar una clase de especificación de clave específica de algoritmo (en este caso: DESKeySpec).

Supongo que tus bytes no corresponden a una clave válida para AES. Aquí puede encontrar un ejemplo sobre cómo generarlo. Suerte.

ACTUALIZACIÓN: Ver también aquí .

ACTUALIZACIÓN 2: Como señala la otra respuesta, tu particular en particular seguramente no es válida porque tu sistema no es compatible con AES 256. Acórtalo a 16 bytes (128 bits) y vuelve a intentarlo.