我正在使用 Laravel 来注册用户。它像这样使用 bcrypt:
$2y$10$kb9T4WXdz5aKLSZX1OkpMOx.3ogUn9QX8GRZ93rd99i7VLKmeoXXX
Run Code Online (Sandbox Code Playgroud)
我目前正在制作另一个脚本,该脚本将使用 python 对来自另一个来源的用户进行身份验证。我安装py-bcrypt并尝试了它。格式如下:
$2a$10$Vj0b0GZegbpXIIpa/lvi9OjkAFJ5zNzziVRW7yN9ssDKVQDX47XXX
Run Code Online (Sandbox Code Playgroud)
但是在 python 上,由于invalid salt.
我注意到 Laravel bcrypt 使用$2y而 python 使用$2a. 我该如何解决这个问题?
笔记:
I used 10 rounds for both crypts.
Run Code Online (Sandbox Code Playgroud)
我刚刚发现除了名称(前缀)之外,2a和2y非常相似。
替换2yLaravel 散列,以2a保持散列的完整性,即使您替换身份,也应该正常工作并匹配密码。
就我而言(问题),解决方案是使用str.replace('$2y$', '$2a$'),并且一切正常。现在 py-bcrypt 接受没有错误的散列invalid salt。
祝大家好运。
现在在 2018 年,我们可以使用来自 php 的哈希字符串:
<?php echo password_hash( "302010", PASSWORD_BCRYPT ); ?>
Run Code Online (Sandbox Code Playgroud)
$2y$10$20l2aC6kIyltpgWLmp80n.4itLhmoP58CU80m1 m/ukE8TZYJAASx。
并用python检查它:
>>>import bcrypt
>>>bcrypt.checkpw(b'302010',b'$2y$10$20l2aC6kIyltpgWLmp80n.4itLhmoP58CU80m1
m/ukE8TZYJAASx.')
Run Code Online (Sandbox Code Playgroud)
真的
或来自 python 的哈希字符串和 php
>>>import bcrypt
>>>hashed = bcrypt.hashpw(b'302010', bcrypt.gensalt())
Run Code Online (Sandbox Code Playgroud)
$2b$12$tbv8bBsuQUwq0GTCW0E2GeVUiS65ESb60fRVwbaVLlR1m4iwbbOWO
<?php //validade hash in php
if(password_verify ( "302010", '$2b$12$tbv8bBsuQUwq0GTCW0E2GeVUiS65ESb60fRVwbaVLlR1m4iwbbOWO' )){
echo "valid";
} else {
echo "invalid";
} ?>
Run Code Online (Sandbox Code Playgroud)