比较md5哈希值

时间:2014-05-10 11:52:36

标签: php cookies hash md5

我想改进我的登录系统,添加"记住我"功能。我实际上做到了,一切正常,但现在我想通过仅将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

        }

1 个答案:

答案 0 :(得分:0)

MD5不是可逆功能。 设计是单向函数;换句话说,在给定哈希值的情况下获得一个原像(即找到给定m的{​​{1}})在计算上是不可行的。如果您想阻止用户修改cookie,请将MAC(例如,HMAC-SHA256)附加到用户名并在使用前进行验证。

作为加密散列函数,MD5因其碰撞和前映像电阻中存在缺陷而被视为已损坏,因此建议不要在新代码中使用MD5。 SHA-256是目前最常见的替代品。