Laravel&Meteor密码哈希

Ben*_*rne 5 hash bcrypt laravel meteor

我有两个应用程序,一个在Laravel 5.2中,一个在Meteor中.我想收集与两个平台兼容的密码哈希值.

数据库分别存储哈希值

  • password 对于Laravel.
  • meteor_password 对于流星.

默认情况下,两个平台都使用bcrypt 10轮,但是在bcrypt之前,Meteor似乎是sha256普通密码.

如果Meteor创建密码哈希abc,我可以使用普通密码,并将其与abc使用Laravel的内部结构进行比较,即Auth::attempt()

$sha256 = hash('sha256', $request->get('password'), false);
Run Code Online (Sandbox Code Playgroud)

这有效.Laravel成功验证了用户身份.

但是,如果我在Laravel中注册一个新用户并存储哈希值meteor_password,则在Meteor中对该哈希进行身份验证时,它将失败,并显示错误消息"登录禁止".此错误似乎意味着不正确的凭据.

我正在创建哈希,就像我在Laravel中验证它一样.

$meteor_password = bcrypt(hash('sha256', $plain, false));
Run Code Online (Sandbox Code Playgroud)

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

Mas*_*rAM 4

2011 年,PHP 的 BCrypt 实现中发现了一个错误,因此他们将原始版本指示符更改为今天使用的和,以指示密码已通过固定版本进行哈希处理。2a2x2y

因此,PHP 生成的哈希2y应该与节点生成的哈希相同2a。

应更改前缀以便 NPM 模块(由 Meteor 使用)正确处理,因为它不确认2y.

$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';
Run Code Online (Sandbox Code Playgroud)