据我目前的理解(至少我认为),password_hash() 函数根据使用的算法、成本和盐生成哈希。而password_verify 使用eg 提供的信息password_hash($pass, PASSWORD_BCRYPT, array('cost'=>10))
来检查返回的值是真还是假,因为它包含验证所需的所有信息。
我以前用过
$SQL_Query = "SELECT * FROM DB_Table WHERE userName = '".$username."'" AND password = $ID;
这将起作用,因为它们以纯文本形式存储并且可以返回 true,而从逻辑上讲,这一次它不会起作用。
我遇到过类似的问题,他们在解释中使用静态密码,例如
<?php
$to_verify = '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq';
if (password_verify('rasmuslerdorf', $to_verify))
{
echo 'Password is valid!';
} else
{
echo 'Wrong password.';
}
我难以理解的概念是,如果密码输入存储在数据库中,而不是在那个时间点被页面知道,如何检查密码输入与哈希值?我最近得到了有关存储值的帮助,这对我来说是一个愚蠢的错误,但我想这并没有像我现在希望的那样点击我。