Estoy intentando decodificar el siguiente texto cifrado codificado en base 64 en Node.js con el incorporado en la biblioteca de criptografíaDescifrado pez globo-BCE con cripto nodejs vs mcrypt de php
2tGiKhSjSQEjoDNukf5BpfvwmdjBtA9kS1EaNPupESqheZ1TCr5ckEdWUvd+e51XWLUzdhBFNOBRrUB5jR64Pjf1VKvQ4dhcDk3Fdu4hyUoBSWfY053Rfd3fqpgZVggoKk4wvmNiCuEMEHxV3rGNKeFzOvP/P3O5gOF7HZYa2dgezizXSgnnD6mCp37OJXqHuAngr0pps/i9819O6FyKgu6t2AzwbWZkP2sXvH3OGRU6oj5DFTgiKGv1GbrM8mIrC7rlRdNgiJ9dyHrOAwqO+SVwzhhTWj1K//PoyyzDKUuqqUQ6AvJl7d1o5sHNzeNgJxhywMT9F10+gnliBxIg8gGSmzBqrgwUNZxltT4uEKz67u9eJi59a0HBBi/2+umzwOCHNA4jl1x0mv0MhYiX/A==
Parece que funciona con mcrypt de PHP funciones usando la cadena typeconfig.sys^_-
como la clave, como se muestra ingresando el valor en http://www.tools4noobs.com/online_tools/decrypt/ y seleccionando decodificación Blowfish, ECB, Base64.
Sin embargo, cuando ejecuto el código siguiente en Node.js:
var crypto = require('crypto');
var data = "2tGiKhSjSQEjoDNukf5BpfvwmdjBtA9kS1EaNPupESqheZ1TCr5ckEdWUvd+e51XWLUzdhBFNOBRrUB5jR64Pjf1VKvQ4dhcDk3Fdu4hyUoBSWfY053Rfd3fqpgZVggoKk4wvmNiCuEMEHxV3rGNKeFzOvP/P3O5gOF7HZYa2dgezizXSgnnD6mCp37OJXqHuAngr0pps/i9819O6FyKgu6t2AzwbWZkP2sXvH3OGRU6oj5DFTgiKGv1GbrM8mIrC7rlRdNgiJ9dyHrOAwqO+SVwzhhTWj1K//PoyyzDKUuqqUQ6AvJl7d1o5sHNzeNgJxhywMT9F10+gnliBxIg8gGSmzBqrgwUNZxltT4uEKz67u9eJi59a0HBBi/2+umzwOCHNA4jl1x0mv0MhYiX/A==";
var decipher = crypto.createDecipher('bf-ecb', 'typeconfig.sys^_-');
data = decipher.update(data, "base64", "utf8");
data += decipher.final("utf8");
console.log(data);
consigo la producción de basura:
y
�:����d�(����Q�i��z1��4�� �k�(� ��a5����u��73c/��(ֻ��)��������fȠ���
�ec�-<z�8����(�-L���ԛ�I��1L*��u�4�j-�Чh쭊@\P)?�.�^���q㊬�U���W&�x��85�T-ג9,dE<g}�`*�
��|@����k"�!�D'u���,x��7����
��9q=q�q��ա>�w�T����H3͜�i)R��zy��C��
��o�
También he intentado una prueba de la propia biblioteca, en la que parece ser capaz de manejar las cosas que codifica propio bien:
var crypto = require('crypto')
var cipher = crypto.createCipher("bf-ecb", "key");
var data = cipher.update("foobar", "utf8", "base64");
data += cipher.final("base64");
console.log(data);
var decipher = crypto.createDecipher("bf-ecb", "key");
data = decipher.update(data, "base64", "utf8");
data += decipher.final("utf8");
console.log(data);
produce:
y0rq5pYkiU0=
foobar
pero copiar y pegar esa cadena de base 64 y la introducción en http://www.tools4noobs.com/online_tools/decrypt/ junto con la "clave" clave produce una salida de basura también.
¿No deberían estas dos bibliotecas producir el mismo resultado, o hay algo que he hecho mal?
La documentación para Node.js y PHP mcrypt no son claras, pero parece Node.js utiliza una función de derivación de claves, mientras que mcrypt utiliza la clave tal cual. Como Node.js implementa PBKDF2, supongo que es su algoritmo clave de derivación, pero no veo cómo especificar los parámetros. Debe averiguar los parámetros que utiliza, luego derivar una clave dada su contraseña, y usar esa clave en el lado de PHP. – erickson
Ah, también, he notado en el código de Node.js que funciona, usted usa 'createCipher()' para encriptar * y * descifrar, mientras que en su código original, que no funciona, está usando 'createDecipher()'. – erickson
@erickson sí, el 'createCipher' dos veces fue un error tipográfico, lo siento .. Mi problema es que estoy tratando de ser compatible con otro servicio que requiere esa clave cruda específica (vea la primera cadena codificada en base64 para el ejemplo), así que la respuesta ayuda a explicar la diferencia entre los dos, en realidad no me ayuda a decodificar y codificar lo que necesito. –