我想改进我的登录系统,添加"记住我"功能。我实际上做到了,一切正常,但现在我想通过仅将md5哈希值保存到cookie来升级它,因此用户无法编辑它们。但是当我散列字符串并将其存储到cookie然后再次散列它时,它不会返回原始字符串,但会返回不同的散列。有什么办法可以实现吗?代码:
设置cookie(这很好):
$userCrypted = md5($_SESSION['username']);
if(!empty($remember)) {setcookie('remember', $userCrypted ,time()+60*60*24*365);}
使用cookie值从数据库中提取数据(这不起作用):
if(isset($_COOKIE['remember'])) {
$user = $_COOKIE['remember'];
$user = md5($user);
$queryCookie = "SELECT * FROM `users` WHERE `username` = '$user'";
$resultCookie = mysqli_query($link, $queryCookie) or die(mysqli_error($link));
while ($output = mysqli_fetch_object($resultCookie)) {
//data extraction
}
答案 0 :(得分:0)
MD5不是可逆功能。 设计是单向函数;换句话说,在给定哈希值的情况下获得一个原像(即找到给定m
的{{1}})在计算上是不可行的。如果您想阻止用户修改cookie,请将MAC(例如,HMAC-SHA256)附加到用户名并在使用前进行验证。
作为加密散列函数,MD5因其碰撞和前映像电阻中存在缺陷而被视为已损坏,因此建议不要在新代码中使用MD5。 SHA-256是目前最常见的替代品。