Laravel&流星密码哈希

时间:2016-02-05 16:11:30

标签: laravel meteor hash bcrypt

我有两个应用程序,一个在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));

它似乎很奇怪,它以一种方式而不是另一种方式工作,所以我认为我错过了一些东西。

1 个答案:

答案 0 :(得分:4)

2011年,在PHP的BCrypt实施中发现了一个错误,因此他们changed2a版原始指标2x改为2y2y,这是今天使用,表示密码是由固定版本散列的。

因此,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 );
    }
});