如何使用 Javascript 制作 Laravel 密码哈希

Has*_*han 2 javascript php bcrypt laravel

我有一个 Laravel 网站,它使用 html css 和 js 将所有数据传输到 Hybird 移动应用程序。移动应用程序在离线模式下工作。我必须在基于从网站传输的数据的移动设备中执行身份验证。但是 Laravel 使用 bcrypt 哈希。我如何制作类似的哈希器来匹配 javascript 中的密码?是否可以在 javascript 中制作类似的 hasher 或者有人已经这样做了??

sma*_*8dd 5

试图回答你模糊的问题(假设你正在寻找一个用于 javascript 的 bcrypt 库):

1) 这里有一个用于 javascript 的 bcrypt 库: https : //github.com/nevins-b/javascript-bcrypt 在这里找到: bCrypt implementation in Javascript

我会假设(但不确定)laravel 使用 php 内置函数password_hash()and password_verify(),因此输出一种特殊格式,其中包含使用过的盐,就像 php doc 中的这个例子:

$hash = '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq';

您可以查看两者的 php 文档:https : //secure.php.net/manual/en/function.password-verify.php https://secure.php.net/manual/en/function.password-hash .php

您需要调整哈希字符串,以便您可以在 javascript bcrypt 函数中使用它来验证移动应用程序中用户提供的密码。

更新

盐存储在哈希中,因此您可以提取它以进行 javascript 验证 - 只需取前缀“$2y$10$”的前 22 个字符(在此示例中,盐是“saltsaltsaltsaltsaltse”):

echo password_hash('JohnDoe', PASSWORD_DEFAULT, ['salt' => 'saltsaltsaltsaltsaltse']);
# will output $2y$10$saltsaltsaltsaltsaltseQMyqgPkFxQ1hfP2yBcGxgbJZGe1uGXq
Run Code Online (Sandbox Code Playgroud)

更新

感谢 hassans 的研究,发现 javascript 库与散列兼容,phps password_hash() 无需拆分散列和/或单独提供盐。为避免js 库中由 php 生成的散列出现“无效盐修订版”错误,必须将散列前缀中的$2ywith替换$2a。来自 js 库的哈希值可以被 php 使用而无需替换。