现在,我们正在尝试将用户密码哈希值从基本的 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 检查。
- 正在执行多少轮哈希,以及
- 正在使用哪个版本的算法。
这些都应该很容易检查,因为它们应该在存储的哈希的开头进行编码。
哈希密码密码
可能看起来像
$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/