您好,我正在 python 上構建一個 API 來創建用戶并在資料庫中插入密碼。問題是該應用程式在 Laravel PHP 上并使用 bcrypt。
例如,在PYTHON中加密“ test1234$% ”會得到“ $2b$12$rsGZPtjctbI6bSGzS4P3mOSdrABnJuHfnKxEQwvm4KFu72BN3XNKK ”,在PHP中加密會得到“ $2y$10$cO2nvRURLRdlW8j6CbWu8OeVlv7dyeozpBZcxVB2nd8hby ”
并且當嘗試使用應用程式上的 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);
}
}
uj5u.com熱心網友回復:
bcrypt 在每個運行時使用不同的鹽,這就是為什么它非常適合在資料庫上存盤密碼......除非你每次強制它使用相同的鹽,它會不斷生成不同的結果哈希
uj5u.com熱心網友回復:
我在 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')
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/417497.html
標籤:
