Php 比较md5哈希

Php 比较md5哈希,php,cookies,hash,md5,Php,Cookies,Hash,Md5,我想通过添加记住我的功能来改进我的登录系统。实际上我做到了,一切正常,但现在我想升级它,只将md5哈希值保存到cookie中,这样用户就不能编辑它们了。但当我散列字符串并将其存储到cookie中,然后再次散列时,它不会返回原始字符串,而是返回不同的散列。我有什么办法可以做到这一点吗?代码: 设置cookie此选项效果良好: $userCrypted = md5($_SESSION['username']); if(!empty($remember)) {setcookie('remember',

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

        }

MD5不是可逆函数。它被设计成单向功能;换句话说,在计算上不可能获得给定散列的前图像,即,在给定MD5m的情况下找到m。如果您想阻止用户修改cookie,请在用户名后附加一个MAC,例如HMAC-SHA256,并在使用前进行验证


作为一个加密散列函数,MD5被认为是坏的,因为它在冲突和预映像抵抗中发现了缺陷,所以建议不要在新代码中使用MD5。SHA-256是目前最常见的替代品。

为什么散列会得到原始字符串?数据库中的用户名列是否真的包含散列值?用户选择任何他们喜欢的用户名都很简单,md5 It,然后将其存储在cookie中。顺便说一句,您从中获得的安全性接近于零。我没有在数据库中对其进行哈希处理。但是,我如何防止用户编辑cookie,使他们不能以其他用户身份登录?我也应该将密码保存到cookie吗?你不能阻止用户编辑cookie,也不能在cookie中存储密码;但是,您可以在另一个cookie中添加一个唯一的值,该值与用户名一起根据数据库上的MemberId列进行验证,并且两者必须匹配才能有效