如何检查编码的密码?

时间:2014-12-21 21:50:37

标签: php symfony hash encode bcrypt

注册:

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

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

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

2 个答案:

答案 0 :(得分:1)

@ Deepak的评论是正确的。 Salt 意味着在每个请求中都是唯一的。它应该是普遍的,并且准永久地分配给用户的帐户。

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

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

答案 1 :(得分:-1)

您的密码是以盐形式存储的,不是吗?

在session_start();

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

$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'];