如何检查编码的密码


How to check password which is encoded?

注册:

$users->setSalt(md5(time()));
$encoder = new MessageDigestPasswordEncoder('sha1', true, 1);
$password = $encoder->encodePassword($users->getPassword(), $users->getSalt());
$users->setPassword($password);

结果是这样的:qSmJxDmP8WhVJZIiJpeVLJFLnio=因此,密码是安全的。但是,当用户尝试登录时,如何检查它是否是相同的密码?(密码来自表单,它等于数据库中的密码(

我很困惑,因为有盐,每次都是独一无二的。什么是更好的技术?

>@Deepak的评论是正确的。盐并不意味着在每个请求上都是唯一的。它意味着普遍是唯一的,并准永久分配给用户的帐户。

存储的 salt 值与设置密码时用于创建密码哈希的盐值相同。

然后,当您检查用户提供的密码时,使用相同的盐值,计算新的哈希,并将其与存储的哈希进行比较。如果他们匹配,你就有一个赢家。

您的密码存储为盐,不是吗?

session_start((;

有一个 logIn(( 函数来验证每个安全操作 logOut((,通过用户名从 $_POST['用户名'] 或 $_SESSION['用户名'] 查询您的数据库

$user = DB_QUERY_BY_USERNAME;
if ( !$user ) { logOut(); }
if ( $_POST['username'] && $_POST['password'] )
{
    if ( $user['password'] != md5( $_POST['password'] . $user['salt'] ) )
    {
        logOut();
    }
}
else if ( $_SESSION['username'] != $user['username'] )
{
    logOut();
}
// Logged in, renew cookies, update DB, set $_SESSION variables
$_SESSION['username'] = $user['username'];