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)
它似乎很奇怪,它是单向工作而不是另一种,所以我认为我错过了一些东西.
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)