一尘不染

为什么crypto.createHash在新版本中返回不同的输出?

node.js

问题

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


阅读 471

收藏
2020-07-07

共1个答案

一尘不染

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输出与6之前的版本相同的输出,则必须告诉.update()您使用binary编码:

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

或相反(使Node pre-6的输出与6相同):

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