在 Laravel 中验证来自 Adonis 的 bcrypt 哈希

Verify bcrypt hash from Adonis in Laravel

嘿,让 Adonis 制作的密码哈希在 Laravel 中工作有点麻烦,一个例子是

// Adonis
> await Hash.make('password')
'$bcrypt$v=98$r=10$cIF1Ev2ATA6/iYv4kddXCQ$qcrDoGjsiB2eLq1/vCZWiAZ8bEs4+Qs'

// Laravel
>>> Hash::make('password')
=> "y$kV7kssmFuFOydBewIp9ele8GMkWGDPpte6jGGDAabpsBmxtzWxfZW"

因此,从哈希值来看,他们似乎都使用了 10 轮。 Adonis 用 $

拆分盐和哈希

所以我想只是提取 salt + hash 并格式化为 Laravels 格式。然后在 Laravel 示例

中检查它
// Laravel
Hash::check('password', 'y$cIF1Ev2ATA6/iYv4kddXCQqcrDoGjsiB2eLq1/vCZWiAZ8bEs4+Qs');

然而它返回 false 没有匹配。

不确定问题出在哪里。

第一个散列在 PHC string format:

$bcrypt$v=98$r=10$cIF1Ev2ATA6/iYv4kddXCQ$qcrDoGjsiB2eLq1/vCZWiAZ8bEs4+Qs

此格式使用标准 base64 字母表以 base64 编码字节:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

第二个哈希值在 Modular Crypt Format:

y$kV7kssmFuFOydBewIp9ele8GMkWGDPpte6jGGDAabpsBmxtzWxfZW

此格式不使用标准的 Base64 字母表,而是使用 Unix Crypt 字母表:

./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789

您需要使用典型的 Base64 字母表解码字节,然后使用 Crypt 字母表对其重新编码,或者为 Laravel 找到接受 PHC 格式的 BCrypt 实现。