问题
我有crypto.createHash用于生成md5哈希的node.js模块。
crypto.createHash
md5
最近,我注意到crypto模块生成的哈希在新版本中有所不同:
crypto
码
require('crypto').createHash('md5').update('¥').digest('hex')
Node.js v0.10.0
输出: ab3af8566ddd20d7efc9b314abe90755
ab3af8566ddd20d7efc9b314abe90755
Node.js v6.1.0
输出: 07625e142e4ac5961de57472657a88c1
07625e142e4ac5961de57472657a88c1
题
我想知道是什么导致了新版本中的问题,如何解决呢?
更新资料
GitHub上的类似问题:
Node v6 +中的某些输入所计算的哈希值与以前的Node版本不同。
基本上,当您.update()使用v6之前的Node版本将字符串传递给时,默认编码为binary,但对于Node v6则更改为utf-8。
.update()
binary
utf-8
例如,使用以下代码:
这将ab3af8566ddd20d7efc9b314abe90755在节点pre-6和07625e142e4ac5961de57472657a88c1节点6上输出。
如果要让Node 6输出与6之前的版本相同的输出,则必须告诉.update()您使用binary编码:
require('crypto').createHash('md5').update('¥', 'binary').digest('hex')
或相反(使Node pre-6的输出与6相同):
require('crypto').createHash('md5').update('¥', 'utf-8').digest('hex')