Laravel&Meteor密码哈希

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

数据库分别存储哈希值

> Laravel的密码.
> meteor_password for Meteor.

默认情况下,两个平台都使用10个轮次的bcrypt,但是在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));

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

在2011年,在PHP的BCrypt实现中发现了一个错误,因此它们将原来的2a版本指示器changed转换为2x和2y(今天使用),表明密码是由固定版本进行的.

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

应更改前缀,以便由NPM模块(由Meteor使用)正确处理,如does not acknowledge 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';
https://stackoverflow.com/questions/35228620/laravel-meteor-password-hashing

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:Laravel&Meteor密码哈希