现在我们正在尝试将用户密码哈希从基本node.js v0.10.48应用程序迁移到Meteor服务器。我希望通过使用相同版本的bcrypt来进行密码散列可能会自己迁移哈希值,但到目前为止,这种比较并不起作用。
我确保两者都使用相同版本的bcrypt,并且每个版本都可以单独使用它们来比较它们自己创建的哈希值。但我无法将服务器A上创建的哈希与使用相同密码在服务器B上创建的哈希进行比较。
有没有办法完成我正在寻找的东西?
编辑:添加一些例子。首先是在流星方面运行:
此处的哈希密码已经是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
在节点应用程序端,使用该密码我得到相同的SHA256哈希,但是在使用相同的盐运行bcrypt之后(故意只使用相同的值进行测试)我得到了
$ 2A $ 10 $ ONspBE0StIMRH0GJOI3zO.uFey4yk7dFS85EycN.lnklr4QZk9T0a
使用相同的SHA256哈希运行上述类似的测试会得到错误的结果。
答案 0 :(得分:0)
有一些事情要检查BCrypt。
这些都应该易于检查,因为它们应该在存储的哈希的开头进行编码。
散列密码Password
可能类似于
$2a$04$b.ATnW5JRfDNyKnKJ8SBO.QwtkLANvAc751Qn.N/wcxZmA/CIDFNK
$2a$04$
显示散列版本和轮次数。
有关算法版本的详细信息,请参阅Wikipedia BCrypt Versioning History。
如果版本相同,那么散列的散列可能不同,两者都应该是可配置的。
答案 1 :(得分:0)
这意味着什么,迁移哈希?
观察meteor
哈希用户输入客户端的密码:
这是你期望的吗?
原始用户密码在被送入bcrypt
之前是否已经哈希?如果没有,您需要修改accounts-password
以直接使用密码登录,而不是客户端哈希密码。您可以更改上面的代码来执行此操作。
如果在进入bcrypt
之前进行了哈希处理,请注意Meteor有自己的SHA256包,与crypt
相比,输出可能略有不同:
https://github.com/meteor/meteor/blob/devel/packages/sha/sha256.js
不要把盐弄得一团糟。这不是问题。