Javascript 为什么crypto.createHash在新版本中返回不同的输出?
问题 我有node.js模块,它使用Javascript 为什么crypto.createHash在新版本中返回不同的输出?,javascript,node.js,hash,backwards-compatibility,node-crypto,Javascript,Node.js,Hash,Backwards Compatibility,Node Crypto,问题 我有node.js模块,它使用crypto.createHash生成md5哈希 最近我注意到,crypto模块生成的哈希在新版本中有所不同: 代码 require('crypto').createHash('md5').update('¥').digest('hex') Node.js v0.10.0 输出:ab3af8566ddd20d7efc9b314abe90755 Node.jsv6.1.0 输出:07625e142e4ac5961de57472657a88c1 问题 我想知道在
crypto.createHash
生成md5
哈希
最近我注意到,crypto
模块生成的哈希在新版本中有所不同:
代码
require('crypto').createHash('md5').update('¥').digest('hex')
Node.js v0.10.0
输出:ab3af8566ddd20d7efc9b314abe90755
Node.jsv6.1.0
输出:07625e142e4ac5961de57472657a88c1
问题
我想知道在新版本中是什么原因造成的,我如何解决这个问题
更新
require('crypto').createHash('md5').update('¥').digest('hex')
GitHub上的类似问题:
.update()
时,对于v6之前的节点版本,默认编码为二进制
,但对于更改为utf-8
的v6节点
例如,以以下代码为例:
require('crypto').createHash('md5').update('¥').digest('hex')
这将在节点6之前输出ab3af8566ddd20d7efc9b314abe90755
,在节点6上输出07625e142e4ac5961de57472657a88c1
如果希望节点6的输出与6之前的版本相同,则必须告诉.update()
使用二进制编码:
require('crypto').createHash('md5').update('¥', 'binary').digest('hex')
或者反过来(使节点6之前的输出与6相同):
就像在github中标记此问题一样:
是关于在v5/v6和v4及更早版本中更改为utf8
的摘要的默认编码,它是binary
这些编码(binary/utf-8)是否在字符字节顺序上有所不同?@vp\u不是太多字节顺序,但它们在字节中的表示方式不同。我相信binary
是拉丁-1编码(它可以表示的字符数有限,我想这就是为什么节点v6的默认值更改为utf-8
)。