6

ProblèmePourquoi crypto.createHash renvoie une sortie différente dans la nouvelle version?

Je le module Node.js qui utilise crypto.createHash pour générer md5 hachage.

Récemment, je remarqué que hachage généré par crypto module est différent dans les nouvelles versions:

code

require('crypto').createHash('md5').update('¥').digest('hex') 

Node.js v0.10.0

Sorties: ab3af8566ddd20d7efc9b314abe90755

Node.js 6.1.0

Sorties: 07625e142e4ac5961de57472657a88c1

Question

Je me demandais ce qui cause que, dans une nouvelle version et comment puis-je résoudre ce problème?

Mise à jour

questions similaires sur GitHub:

Répondre

17

Certaines entrées dans le nœud v6 + calculer un hachage différent que les précédentes versions de nœud. Fondamentalement, lorsque vous passez une chaîne à .update(), avec les versions de nœud avant v6, le codage par défaut était binary, mais pour le nœud v6 qui est passé à utf-8.

Par exemple, prenez ce code:

require('crypto').createHash('md5').update('¥').digest('hex') 

Ce sorties ab3af8566ddd20d7efc9b314abe90755 sur le nœud pré-6 et 07625e142e4ac5961de57472657a88c1 sur le noeud 6.

Si vous voulez noeud 6 à la sortie le même que les versions antérieures à 6 , vous devez dire .update() utiliser binary encodage:

require('crypto').createHash('md5').update('¥', 'binary').digest('hex') 

Ou l'inverse (output noeud pré-6, la même que 6):

require('crypto').createHash('md5').update('¥', 'utf-8').digest('hex') 
+0

Est-ce ces codages (binary/utf-8) diffère par l'ordre des octets in-char? –

+1

@vp_arth pas tellement octet _order_, mais la façon dont ils sont représentés en octets diffère. Je crois que 'binary' est un encodage en Latin-1 (qui est limité par le nombre de caractères qu'il peut représenter, ce qui est la raison pour laquelle la valeur par défaut a été changée en 'utf-8' pour Node v6). – robertklep