我有两个应用程序,一个在Laravel 5.2中,另一个在Meteor中。我想收集与两个平台兼容的密码哈希值。
数据库单独存储哈希
password
代表Laravel。meteor_password
对于Meteor。默认情况下,两个平台都使用bcrypt 10轮,但是在bcrypt之前,Meteor似乎是sha256普通密码。
如果Meteor创建密码哈希abc
,我可以使用普通密码,并使用Laravel的内部结构与abc
进行比较,即Auth::attempt()
$sha256 = hash('sha256', $request->get('password'), false);
这很有效。 Laravel成功验证了用户身份。
但是,如果我在Laravel中注册一个新用户并存储散列meteor_password
,则在Meteor中对该散列进行身份验证时,它会失败,并显示错误消息" Login Forbidden"。 This error appears to be mean incorrect credentials.
我创建哈希的方式与我在Laravel中验证时的方式相同。
$meteor_password = bcrypt(hash('sha256', $plain, false));
它似乎很奇怪,它以一种方式而不是另一种方式工作,所以我认为我错过了一些东西。
答案 0 :(得分:4)
2011年,在PHP的BCrypt实施中发现了一个错误,因此他们changed将2a
版原始指标2x
改为2y
和2y
,这是今天使用,表示密码是由固定版本散列的。
因此,PHP 2a
生成的哈希值应与节点$meteor_password = bcrypt(hash('sha256', $plain, false));
// replace it useing something like:
$meteor_password = str_replace('$2y', '$2a', $meteor_password);
// or
$meteor_password[2] = 'a';
生成的哈希值相同。
前缀应该更改,以便由NPM模块(由Meteor使用)正确处理,因为does not acknowledge 2y
。
addComponentListener( new ComponentAdapter() {
@Override
public void componentShown( ComponentEvent e ) {
setIcon( new ImageIcon( getThumb() ) );
}
@Override
public void componentHidden( ComponentEvent e ) {
setIcon( null );
}
});