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