你好,我正在python上构建一个API,以创建一个用户并在数据库中插入密码。问题是应用程序是在Laravel上并使用bcrypt的。
例如,在"$2b$12$rsGZPtjctbI6bSGzS4P3mOSdrABnJuHfnKxEQwvm4KFu72BN3XNKK“中加密”#en1#1234$“,在PYTHON 中给出,而在PHP 中加密相同的E 211 "$2y$10$cO2nvRURLRdlW8j6CbWu8OeVlv7dyeozpBZcxVB2nd8hbyILyg7Xa”
当尝试与应用程序上的api创建的用户登录时,它不起作用。即使我用这个测试它不工作,输出也是无效的
$hash = '$2b$12$rsGZPtjctbI6bSGzS4P3mOSdrABnJuHfnKxEQwvm4KFu72BN3XNKK';
//validade hash in php
if(password_verify ( "test1234$%", $hash )){
echo "valid";
} else {
echo "invalid";
}
echo("\n".phpversion());在python端使用了以下代码:
pip install bcrypt import bcrypt
password = item.password
bpassword = b"password"
hashed = bcrypt.hashpw(bpassword, bcrypt.gensalt())在PHP方面:
if (! function_exists('bcrypt')) {
/**
* Hash the given value against the bcrypt algorithm.
*
* @param string $value
* @param array $options
* @return string
*/
function bcrypt($value, $options = [])
{
return app('hash')->driver('bcrypt')->make($value, $options);
}
}发布于 2022-01-20 11:38:41
我在我在PHP中称为bcrypt的Python中找到了一个使用子进程的解决方案
code = """echo password_hash("""'"'+item.password+'"'""",PASSWORD_BCRYPT);"""
hashed_password = await myClass.php(code) async def php(self, code):
p = subprocess.Popen(["php", "-r", code],
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out = p.communicate()
if out[1] != b'': raise Exception(out[1].decode('UTF-8'))
return out[0].decode('UTF-8')发布于 2022-01-19 09:17:37
bcrypt每次运行时都使用不同的salt,这就是为什么它非常适合在数据库中存储密码.除非您强迫它每次使用相同的盐分,否则它将继续生成不同的结果散列。
https://stackoverflow.com/questions/70767536
复制相似问题