我有这段代码:
$password = vancab123;
password_hash(base64_encode( hash('sha512',$password, true) ), PASSWORD_DEFAULT );
数据库存储值:
$password = $2y$10$jUa8ZEFBX5lfsBmySUnJFeSSyKwQ1v/emazJZPh8MwJ0g0lLbmjYC;
我的问题:
我用过#34;记住我"功能。如果用户使用该功能,他/她的凭据(电子邮件和密码)将使用cookie保存7天。
我的问题是因为电子邮件和密码会自动填写电子邮件和密码文本框,密码文本框字符太长,因为它是哈希值。
如何将散列密码的长度与原始/未散列密码相匹配?
答案 0 :(得分:4)
你不需要跳过所有这些箍来使用password_hash
,这就是如何检查输入的密码是否与之前的哈希密码相匹配
HASH的要点是它不能(在合理的时间范围内)转换回其原始值。相反,您必须使用password_verify()将其与用户在返回并尝试使用相同密码登录时输入的未散列值进行比较。
$password = 'vancab123';
$hashed_pwd = password_hash($password);
// test the hashed password
if ( password_verify($password, $hashed_pwd) ) {
//password entered is OK
} else {
//password entered is WRONG
}
在您澄清问题后的补充:
请阅读此内容以获取“记住我”功能What is the best way to implement "remember me" for a website?
答案 1 :(得分:0)
哈希是任意值的单向变换。它们本质上是不可逆转的。在您的情况下,您将需要散列用户提供的密码,从db中检索值,并对两个散列值进行比较。
唯一的替代方案是彩虹攻击背后的范例,在这种范例中,您可以散列每个可能的可能性并将它们存储为键值对,但这是很多数据。