14

问题

我有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 上的类似问题:

4

2 回答 2

27

Node v6+ 中的一些输入计算的哈希值与以前的 Node 版本不同。

基本上,当您将字符串传递给 时.update(),在 v6 之前的 Node 版本中,默认编码为binary,但对于 Node v6,则更改为utf-8.

例如,使用以下代码:

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

ab3af8566ddd20d7efc9b314abe90755在节点 pre-6 和07625e142e4ac5961de57472657a88c1节点 6 上输出。

如果您希望 Node 6 输出与 pre-6 版本相同的输出,则必须告诉.update()使用binary编码:

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

或者反过来(使 Node pre-6 输出与 6 相同):

require('crypto').createHash('md5').update('¥', 'utf-8').digest('hex')
于 2016-05-25T19:04:44.660 回答
4

就像在 github 中标记这个问题一样: httpsutf8 ://github.com/nodejs/node/issues/6813 是关于在 v5/v6 和 v4 及更早版本中更改为摘要的默认编码binary

于 2016-05-25T20:25:26.247 回答