Estoy buscando una manera de hacer una de 2 vías de cifrado de un texto simple (de 5 a 6 números y/o caracteres). El problema es que quiero hacer la codificación en php y luego descifrar a través de Javascript. Para php, he probado usando mcrypt_encode y han conseguido que funcione, por lo tanto, cuando trato de descifrar con javascript (yo estoy usando la Cripto-js biblioteca – http://code.google.com/p/crypto-js/ ) no obtengo resultados. Aquí está el código php que estoy usando:

$key = "oijhd981727783hy18274";
$text = "1233";
$td = mcrypt_module_open(MCRYPT_RIJNDAEL_256, '', MCRYPT_MODE_CBC, '');
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_CBC,$iv);
echo base64_encode($crypttext);

y aquí está el código Javascript que estoy usando:

var encrypted = CryptoJS.enc.Base64.parse("LiJU5oYHXRSNsrjMtCr5o2ev7yDFGZId85gh9MEXPeg=");
var key = 'oijhd981727783hy18274';
var decrypted = CryptoJS.AES.decrypt(encrypted, key);
document.write( decrypted.toString(CryptoJS.enc.Utf8) );

Como solo estoy probando, me copiar/pegar la salida desde el php directamente en la JS y ver si devuelve ningún resultado, sin embargo eso no suceda. Como soy nuevo en el cifrado/descifrado de la parte i puede ser que falte algo. Cualquier sugerencia será muy apreciada.

En una nota de lado, como he leído un montón de sugerencias sobre el uso de otros tipos de comunicación para la transferencia de datos, que no sería posible en este caso, como tengo que pasar esta cadena a un software de terceros, que traerá más en una zona segura, donde tengo acceso a modificar sólo los de javascript, es por eso que estoy tratando de cifrar el texto en php y colóquelo dentro de la web de la fuente, desde donde el software de terceros que se va a leer como es encriptada y traslado a la sección segura, donde me tendrá que descifrar a través de Javascript (no tengo acceso al php).

Podría querer ganarle al cliente que configurar este proceso con un húmedo peces, hasta que se compromete a implementar SSL en todo.
No veo que anteponiendo el IV del texto cifrado. Hacer sus bibliotecas hacen automáticamente? Si no, es probable que la causa de sus problemas.
¿Te refieres a que debo tener: echo base64_encode($iv.$crypttext); ?

OriginalEl autor Lyubomir Lyubenov | 2012-08-03

3 Comentarios

  1. 5

    Así que, después de algo más de la excavación se me vino a la siguiente línea encriptador/decryptor que me llevó a la el guirigay-aes en GitHub repositorio.

    Dentro de uno de los comentarios sobre el primer enlace que he encontrado que este JS biblioteca tiene un php equivalente, que parece estar funcionando razonablemente bien y es bastante fácil de implementar:
    https://github.com/ivantcholakov/gibberish-aes-php

    Así que gracias a Lars por la respuesta que proporcionó, yo lo animaría a abrir el repositorio, estoy seguro de que va a hacer la vida de alguien un poco más fácil 🙂

    Gracias, después de perder un montón de tiempo, tratando todo tipo de librerías, tu solución me ayudó!
    FINALMENTE, una solución que funciona correctamente.

    OriginalEl autor Lyubomir Lyubenov

  2. 3

    De la CryptoJS documentación:

    Para la clave, cuando se pasa una cadena, es tratado como una frase de contraseña y se usa para derivar una clave real y IV. O puede pasar un WordArray que representa la clave real. Si pasa la clave real, también debe aprobar el real IV.

    Por lo que en su línea de

    var decrypted = CryptoJS.AES.decrypt(encrypted, key);

    «oijhd981727783hy18274» es tratada como una contraseña para crear una clave y no como la clave real.

    Pasando de una inyección INTRAVENOSA trabaja como esto:

    var key = CryptoJS.enc.Hex.parse('000102030405060708090a0b0c0d0e0f');
    var iv  = CryptoJS.enc.Hex.parse('101112131415161718191a1b1c1d1e1f');
    
    var encrypted = CryptoJS.AES.encrypt("Message", key, { iv: iv });

    OriginalEl autor tdkBacke

  3. 0

    Hace algún tiempo tuve el mismo problema. Finalmente llegué a usar SlowAES de http://code.google.com/p/slowaes/ con algunas correcciones y migrar a PHP.

    Nota: Las fuentes oficiales están rotos, así como el oficial de PHP puerto.

    Hágamelo saber si usted está interesado. A continuación, me gustaría abrir un nuevo repositorio en GitHub donde se puede conseguir todo lo que necesita…

    Gracias Lars, sin embargo, después he continuado la excavación, incluso después de que se abrió esta cuestión y encontrar una solución de trabajo … marque la respuesta más abajo.
    Es por encima de mí, pero no importa. Es importante para obtener un bien solucionado el problema 😉 !

    OriginalEl autor Lars Knickrehm

Dejar respuesta

Please enter your comment!
Please enter your name here