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

我有crypto.createHash用于生成md5哈希的node.js模块。

最近,我注意到crypto模块生成的哈希在新版本中有所不同:

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

输出: ab3af8566ddd20d7efc9b314abe90755

输出: 07625e142e4ac5961de57472657a88c1

我想知道是什么导致了新版本中的问题,如何解决呢?

GitHub上的类似问题:

  • https://github.com/nodejs/node/issues/6813
  • https://github.com/node-xmpp/client/issues/206

回答:

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')

以上是 为什么crypto.createHash在新版本中返回不同的输出? 的全部内容, 来源链接: utcz.com/qa/411456.html

回到顶部