javascript - Node 和meteor服务器之间的bcrypt无效比较

标签 javascript node.js meteor bcrypt

现在,我们正在尝试将用户密码哈希值从基本的 Node.js v0.10.48 应用程序迁移到 Meteor 服务器。我希望通过使用相同版本的 bcrypt 进行密码哈希可以迁移哈希本身,但到目前为止,比较不起作用。

我已确保两者都使用相同版本的 bcrypt,并且它们各自单独工作以比较它们自己创建的哈希值。但我无法将服务器 A 上创建的哈希值与使用相同密码在服务器 B 上创建的哈希值进行比较。

有办法实现我想要的吗?

编辑:添加一些示例。首先是在 Meteor 端运行:

这里的密码散列已经是 SHA256 散列(并且该部分在两个服务器之间排列得很好)。

> bcrypt.hashSync(SHA256 HASHED VALUE, 10)
'$2a$10$ky0cB/ezKnyLojOEVfkS9O9jn0V5Lo3BNMLIU2jTokHDcQDk33A0y'
> bcrypt.hashSync(SHA256 HASHED VALUE, 10)
'$2a$10$FdoTohtW/Djd1CN9MJJk6OmD7z60sBUaz56ez62.V/XH7r5s5yBtu'
> bcrypt.compareSync(SHA256 HASHED VALUE, '$2a$10$ky0cB/ezKnyLojOEVfkS9O9jn0V5Lo3BNMLIU2jTokHDcQDk33A0y')
true
> bcrypt.compareSync(SHA256 HASHED VALUE, '$2a$10$FdoTohtW/Djd1CN9MJJk6OmD7z60sBUaz56ez62.V/XH7r5s5yBtu')
true

在 Node 应用程序端,使用该密码我得到相同的 SHA256 哈希值,但在使用相同的盐对其运行 bcrypt 后(故意仅使用相同的值进行测试),我得到

$2a$10$ONspBE0StIMRH0GJOI3zO.uFey4yk7dFS85EycN.lnklr4QZk9T0a

使用相同的 SHA256 哈希运行与上述类似的测试会得到错误的结果。

最佳答案

有几件事需要通过 BCrypt 检查。

  1. 正在执行多少轮哈希,以及
  2. 正在使用哪个版本的算法。

这些都应该很容易检查,因为它们应该在存储的哈希的开头进行编码。

哈希密码密码可能看起来像

$2a$04$b.ATnW5JRfDNyKnKJ8SBO.QwtkLANvAc751Qn.N/wcxZmA/CIDFNK

其中$2a$04$显示哈希版本和轮数。

参见Wikipedia BCrypt Versioning History有关算法版本的更多详细信息。

如果版本相同,则哈希轮次可能不同,两者都应该是可配置的。

关于javascript - Node 和meteor服务器之间的bcrypt无效比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49535864/

相关文章:

node.js - Express 中的查询参数被提取?

android - 单击时,bootstrap 单击按钮函数不执行 Meteor.call 函数(在 android 4.1.2 浏览器上)

javascript - Meteor.JS 使用外部脚本(在服务器上)

javascript - 将值从 html 传递到 AngularJS Controller

javascript - 为什么这个 jQuery cookie 没有被检索到?

javascript - 从 FastAPI 获取文件时如何使用浏览器缓存?

javascript - 如何根据这段js代码使下拉立即响应?

node.js - 使用 highcharts 在服务器端生成 svg

node.js - 将 stdout 管道传输到 node.js 中另一个进程的 stdin

javascript - 如果 URL 与此匹配,则在打开 body 标签后插入脚本