注册:
$users->setSalt(md5(time()));
$encoder = new MessageDigestPasswordEncoder('sha1', true, 1);
$password = $encoder->encodePassword($users->getPassword(), $users->getSalt());
$users->setPassword($password);
结果是这样的:qSmJxDmP8WhVJZIiJpeVLJFLnio = 所以,密码是安全的。但是当用户尝试登录时,如何检查密码是否相同? (密码来自表单,它等于数据库中的密码)
我很困惑,因为有盐,每次都是独一无二的。 什么是更好的技术?答案 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'];