当前位置: 首页 > 面试题库 >

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

锺星腾
2023-03-14
问题内容

问题

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

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


 类似资料:
  • 问题内容: 我运行了跟随脚本(java),它给了我奇怪的结果。有人可以帮忙解释吗? 记录结果(彼此不同): - - 背景 - - 我想将自己的keyGenrator用于@Cacheable批注(Spring和ehCache)。 在这种情况下,我发现缓存总是丢失的。 然后,我必须更改为: 谢谢 问题答案: 这是因为for 不会被覆盖。即使条目相同,也没有理由为什么的两个实例应该具有相同的值。 试试这

  • 问题内容: 我正在编写一个PHP脚本,用于通过Linux shell命令使用PHP调用它来检查网络连接: 我没有从ping获得错误消息的输出,这是我期望的: 如果该域是一个很好的域,例如yahoo.com,则将ping中的输出输出到数组中。但是,如果这是一个错误,例如它不会返回到数组。 为什么会发生这种情况,有更好的方法吗? 问题答案: 您应该将stderr重定向到stdout。 为此,请像这样更

  • 我为我的密码学初学者水平道歉 在我的项目中,我发现在将密码插入数据库之前需要对密码进行散列,因此我搜索了顶级散列算法,发现了PBKFD2和salt方法。 我这样做的方法是生成随机64char Salt并使用它来散列密码。然后将哈希密码和salt存储在我的数据库中。(注:注册时也会生成密码。这不是我的选择) 登录时,我的Servlet获取密码,然后用数据库中存储的salt散列它。但是我得到了不同的结

  • 在我维护的包中,有一个包含一个未固定的依赖项。安装我的软件包在本地显示的行为与在Travis上显示的行为不同: 在本地运行包上的将导致安装Pandas版本。 在Travis配置项内运行相同的将导致安装Pandas版本(指向作业的链接)。 在这两种情况下,pip和setuptools的版本是相同的(,)。 我没有指定显式索引(而且在本地我没有全局pip配置),所以我假设两者都应该使用标准PyPI索引

  • 我正在使用Microsoft Graph Users API根据我们的ActiveDirectory验证用户名或电子邮件地址列表。名称搜索: https://graph.microsoft.com/v1.0/me/people/?$search=John.Smith 返回其他数据,如和。但如果我使用电子邮件搜索: null 我是否需要额外的权限来获取相同的数据? 更新:我按照下面的建议在https

  • <代码>car\U gear字段在数据库中填写为“stick”(斗杆)。在图像标记后,输出更改为“自动” 为什么结果是$car\u result1-