为什么在新版本中 crypto.createHash returns 输出不同?
Why crypto.createHash returns different output in new version?
问题
我有 node.js 模块使用 crypto.createHash
生成 md5
散列。
最近我注意到 crypto
模块生成的哈希在新版本中有所不同:
代码
require('crypto').createHash('md5').update('¥').digest('hex')
Node.js v0.10.0
输出:ab3af8566ddd20d7efc9b314abe90755
Node.js v6.1.0
输出:07625e142e4ac5961de57472657a88c1
问题
我想知道在新版本中是什么原因导致的,我该如何解决?
更新
GitHub 上的类似问题:
Node v6+ 中的某些输入计算的哈希值与以前的 Node 版本不同。
基本上,当您将字符串传递给 .update()
时,对于 v6 之前的 Node 版本,默认编码为 binary
,但对于 Node v6,更改为 utf-8
.
例如,拿这个代码:
require('crypto').createHash('md5').update('¥').digest('hex')
这在节点 pre-6 上输出 ab3af8566ddd20d7efc9b314abe90755
,在节点 6 上输出 07625e142e4ac5961de57472657a88c1
。
如果你想让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')
就像在github中标记这个问题一样:
https://github.com/nodejs/node/issues/6813 是关于在 v5/v6 中更改为 utf8
的摘要的默认编码,在 v4 和更早版本中它是 binary
问题
我有 node.js 模块使用 crypto.createHash
生成 md5
散列。
最近我注意到 crypto
模块生成的哈希在新版本中有所不同:
代码
require('crypto').createHash('md5').update('¥').digest('hex')
Node.js v0.10.0
输出:ab3af8566ddd20d7efc9b314abe90755
Node.js v6.1.0
输出:07625e142e4ac5961de57472657a88c1
问题
我想知道在新版本中是什么原因导致的,我该如何解决?
更新
GitHub 上的类似问题:
Node v6+ 中的某些输入计算的哈希值与以前的 Node 版本不同。
基本上,当您将字符串传递给 .update()
时,对于 v6 之前的 Node 版本,默认编码为 binary
,但对于 Node v6,更改为 utf-8
.
例如,拿这个代码:
require('crypto').createHash('md5').update('¥').digest('hex')
这在节点 pre-6 上输出 ab3af8566ddd20d7efc9b314abe90755
,在节点 6 上输出 07625e142e4ac5961de57472657a88c1
。
如果你想让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')
就像在github中标记这个问题一样:
https://github.com/nodejs/node/issues/6813 是关于在 v5/v6 中更改为 utf8
的摘要的默认编码,在 v4 和更早版本中它是 binary