为什么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