问题
我有使用crypto.createHash
生成md5
哈希的node.js模块。
最近我注意到crypto
模块生成的哈希在新版本中有所不同:
代码
require('crypto').createHash('md5').update('¥').digest('hex')
Node.js v0.10.0
输出:ab3af8566ddd20d7efc9b314abe90755
Node.js v6.1.0
输出:07625e142e4ac5961de57472657a88c1
问题
我想知道新版本的原因是什么,我该如何解决?
更新
GitHub上的类似问题:
答案 0 :(得分:23)
Node v6 +中的某些输入计算的哈希值与之前的Node版本不同。
基本上,当您将字符串传递给.update()
时,使用v6之前的节点版本,默认编码为binary
,但对于已更改为utf-8
的节点v6。
例如,请使用以下代码:
require('crypto').createHash('md5').update('¥').digest('hex')
这将在节点6之前的节点6和节点6上的ab3af8566ddd20d7efc9b314abe90755
输出07625e142e4ac5961de57472657a88c1
。
如果您希望节点6输出与前6版相同的内容,则必须告诉.update()
使用binary
编码:
require('crypto').createHash('md5').update('¥', 'binary').digest('hex')
或者相反(使节点6之前的输出与6相同):
require('crypto').createHash('md5').update('¥', 'utf-8').digest('hex')
答案 1 :(得分:3)
就像在github中标记这个问题一样:
https://github.com/nodejs/node/issues/6813是关于摘要的默认编码,该摘要在v5 / v6和v4中更改为utf8
,之前更改为binary