nodejs node 32bit node.js cryptography openssl aes

node.js - 32bit - ¿Qué pasa con el descifrado crypto de nodejs?



node versions (1)

Tengo los siguientes datos encriptados:

U2FsdGVkX1+21O5RB08bavFTq7Yq/gChmXrO3f00tvJaT55A5pPvqw0zFVnHSW1o

El pase para descifrarlo es: password

(es el ejemplo de galimatías )

En la línea de comando usando openssl:

echo "U2FsdGVkX1+21O5RB08bavFTq7Yq/gChmXrO3f00tvJaT55A5pPvqw0zFVnHSW1o" | openssl enc -d -aes-256-cbc -a -k password

El resultado es:

Made with Gibberish/n

Con mi aplicación NodeJS:

var decipher = crypto.createDecipher(''aes-256-cbc'', "password"); var dec = decipher.update("U2FsdGVkX1+21O5RB08bavFTq7Yq/gChmXrO3f00tvJaT55A5pPvqw0zFVnHSW1o", ''base64'', ''utf8''); dec += decipher.final(''utf8'');

Tengo el siguiente error TypeError: DecipherFinal fail en la línea de decipher.final .

Me estoy perdiendo de algo ? Gracias.


Los datos encriptados comienzan con una "magia" de 8 bytes que indica que hay una sal. Entonces los próximos 8 bytes son la sal. Ahora las malas noticias: Node.js no parece usar la sal para el método EVP_BytesToKey:

int key_len = EVP_BytesToKey(cipher, EVP_md5(), NULL, (unsigned char*) key_buf, key_buf_len, 1, key, iv);

Ese NULL es la sal.

Esto se ha verificado utilizando una aplicación de prueba de Java (utilizando la sal correcta): se devolvió la cadena resultante.

Por favor, -nosalt la sal con el interruptor OpenSSL -nosalt y vuelva a intentarlo.

[EJEMPLO]

OpenSSL CLI:

openssl enc -aes-256-cbc -nosalt -a -k password owlstead Mh5yxIyZH+fSMTkSgkLa5w==

NodeJS crypto:

var crypto=require(''crypto'') var cipher=crypto.createDecipher(''aes-256-cbc'', "password") var enc = cipher.update("Mh5yxIyZH+fSMTkSgkLa5w==", ''base64'', ''utf8'') enc += cipher.final(''utf8'')

[EDITAR TARDE] Tenga en cuenta que el uso de la derivación de clave secreta con un factor de sal y de trabajo grande puede ser primordial para la seguridad. Será mejor que use una contraseña de entropía única y muy alta, de lo contrario, sus datos encriptados podrían estar en riesgo.

[EDITAR REALMENTE A LA MEDIDA ] OpenSSL 1.1.0c cambió el algoritmo de resumen utilizado en algunos componentes internos. Anteriormente, se usaba MD5 y 1.1.0 cambiaba a SHA256. Tenga cuidado de que el cambio no le afecte tanto en EVP_BytesToKey como en comandos como openssl enc .