PHP bcrypt 到 PYTHON bycrypt 不提供相同的值
PHP bcrypt to PYTHON bycrypt not giving same values
您好,我正在 python 上构建一个 API 来创建用户并在数据库中插入密码。问题是应用程序在 Laravel PHP 上并使用 bcrypt。
例如在 PYTHON 中加密 "test1234$%" 给出 "$2b$12$rsGZPtjctbI6bSGzS4P3mOSdrABnJuHfnKxEQwvm4KFu72BN3XNKK" 并在 PHP 给出“$2y$10$cO2nvRURLRdlW8j6CbWu8OeVlv7dyeozpBZcxVB2nd8hbyILyg7Xa”
并且当尝试使用 api 在应用程序上创建的用户登录时,它不起作用。
即使我用这个测试它也不起作用输出是 invalid:
$hash = 'b$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);
}
}
bcrypt 在每个运行时使用不同的盐,这就是为什么它非常适合在数据库中存储密码......除非你每次都强制它使用相同的盐,它会继续生成不同的结果哈希
我在 Python api 中找到了一个解决方案 我在 PHP 中使用子进程
调用了 bcrypt
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')
您好,我正在 python 上构建一个 API 来创建用户并在数据库中插入密码。问题是应用程序在 Laravel PHP 上并使用 bcrypt。
例如在 PYTHON 中加密 "test1234$%" 给出 "$2b$12$rsGZPtjctbI6bSGzS4P3mOSdrABnJuHfnKxEQwvm4KFu72BN3XNKK" 并在 PHP 给出“$2y$10$cO2nvRURLRdlW8j6CbWu8OeVlv7dyeozpBZcxVB2nd8hbyILyg7Xa”
并且当尝试使用 api 在应用程序上创建的用户登录时,它不起作用。 即使我用这个测试它也不起作用输出是 invalid:
$hash = 'b$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);
}
}
bcrypt 在每个运行时使用不同的盐,这就是为什么它非常适合在数据库中存储密码......除非你每次都强制它使用相同的盐,它会继续生成不同的结果哈希
我在 Python api 中找到了一个解决方案 我在 PHP 中使用子进程
调用了 bcryptcode = """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')