para metodo example encriptar encriptacion desencriptar contraseña codigo cifrado java bash cryptography openssl aes

java - metodo - Función de derivación de clave AES



encriptar y desencriptar sha1 java (0)

Tengo un script bash que usa openssl para cifrar datos y código Java que descifra el resultado. Basado en mi publicación anterior, ahora puedo ingresar una contraseña en openssl y copiar la clave / iv resultante en Java. Esto se basa en el uso de la opción -nosalt en openssl. Quisiera eliminar esa opción y tomar password / salt / iv de openssl y pasarlo a una función de derivación de claves JDK.

Aquí está el script openssl que estoy usando:

#!/bin/bash openssl enc -aes-128-cbc -in test -out test.enc -p

Cuando ejecuto esto e ingreso una contraseña, imprime lo siguiente, por ejemplo.

salt=820E005048F1DF74 key=16023FBEB58DF4EB36229286419F4589 iv=DE46F8904224A0E86E8F8F08F03BCC1A

Cuando pruebo la misma contraseña / salt / iv en Java, no puedo descifrar test.enc. Intenté el código de Java basado en la respuesta de @erickson en esta publicación . Aquí está el fragmento.

SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1"); KeySpec spec = new PBEKeySpec(password, salt, 1024, 128); SecretKey tmp = factory.generateSecret(spec); SecretKey secret = new SecretKeySpec(tmp.getEncoded(), "AES"); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, secret, new IvParameterSpec(iv));

Si imprimo el "secreto" que se genera, no es lo mismo que la "clave" que se abre. ¿Debo cambiar uno de los parámetros de Java para que coincida con la forma en que openssl está derivando su clave?