Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: turion en 26 Septiembre 2016, 22:24 pm



Título: cifrado Java - PHP con resultados diferentes.
Publicado por: turion en 26 Septiembre 2016, 22:24 pm
!Buenas noches a todos!

Pues veréis, tengo un problema algo curioso. Estoy desarrollando una web que tiene su base de datos y esta base de datos es alimentada por un programa escrito en Java. Hasta aqui no hay problema.
El problema viene cuando cifro los datos, es decir, si cifro 'hola' en php obtengo una cadena distinta a si lo cifro en java.

El método en ambos lenguaje es AES 256 cbc, o eso creo yo...

La función que cifra en php es la siguiente:
Código:
function encrypt($string) {
$output = false;

$encrypt_method = "AES-256-CBC";

$secret_key = 'abcdefghijklmnño';
$secret_iv = 'adb6ad2f3ae01b30';

// hash
$key = hash('sha256', $secret_key);

// iv - encrypt method AES-256-CBC expects 16 bytes - else you will get a warning
$iv = substr(hash('sha256', $secret_iv), 0, 16);



    $output = openssl_encrypt($string, $encrypt_method, $key, 0, $iv);
    $output = base64_encode($output);

return $output;
}

Y la que cifra en Java es la siguiente:

Código:
public static String encrypt( String value) {
        try {
            String key = "abcdefghijklmnño";
String initVector = "adb6ad2f3ae01b30";
            IvParameterSpec iv = new IvParameterSpec(initVector.getBytes("UTF-8"));
            SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");

            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
            cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);

            byte[] encrypted = cipher.doFinal(value.getBytes());
            System.out.println("encrypted string: "
                    + Base64.encodeBase64String(encrypted));

            return Base64.encodeBase64String(encrypted);
        } catch (Exception ex) {
            ex.printStackTrace();
        }

        return null;
    }


¿Sabéis a que puede ser debido?

Gracias de antemano¡


Título: Re: cifrado Java - PHP con resultados diferentes.
Publicado por: engel lex en 27 Septiembre 2016, 01:06 am
AES en algunos de sus modos retorna diferentes resultados cada cifrado, el fin de esto es evitar el analisis de paquetes estaticos, sin  embargo si está bien implementado no hay ningun conflicto para retornarlo


Título: Re: cifrado Java - PHP con resultados diferentes.
Publicado por: turion en 27 Septiembre 2016, 20:20 pm
AES en algunos de sus modos retorna diferentes resultados cada cifrado, el fin de esto es evitar el analisis de paquetes estaticos, sin  embargo si está bien implementado no hay ningun conflicto para retornarlo

¿Y no se puede cifrar desde distintos idiomas de programación para el intercambio de información? No le veo el sentido...

Creo que mis métodos están bien implementados, ambos tienen los mismos IV y los mismos key. por lo que debería ofercerme 2 cadenas iguales para una misma frase o letra

¿Y no se puede cifrar desde distintos idiomas de programación para el intercambio de información? No le veo el sentido...

Creo que mis métodos están bien implementados, ambos tienen los mismos IV y los mismos key. por lo que debería ofercerme 2 cadenas iguales para una misma frase o letra


Googleando he encontrado lo siguiente:

https://github.com/stevenholder/PHP-Java-AES-Encrypt


Al parecer funciona, con una cifrado menos extensa pero funcionando.

MOD: No hacer doble post.


Título: Re: cifrado Java - PHP con resultados diferentes.
Publicado por: 6hiii en 9 Octubre 2016, 00:22 am
Creo que el valor de la Ñ puede ser el responsable de que te de diferente para PHP y Java. No puedo asegurartelo porque no programó en PHP pero casos he visto.