4

我在下面有一段代码,它与加盐密码相呼应:

            $pass = rand();
            $pass = md5($pass);
            $pass = substr($pass, 0, 15);
            $pass = md5(md5("g3f".$pass."rt4")); 

现在,如果我回显 $pass,它将输出例如:

8723d9c8a8b2af798be25fd07ab0ff0a 

但我想要做的是回显密码本身,例如,它不会显示上面的内容,而是显示字符串“密码”。

如何做到这一点?

谢谢

4

3 回答 3

10

你不能。散列是一条单行道。如果要隐藏稍后需要显示的字符串,则需要使用加密。但是,在密码方面,这是一个禁忌。

为了解决问题的第二部分,您永远不应该通过电子邮件发送用户密码。实施服务器端解决方案(例如使用安全问题 + 验证他们的电子邮件)并在身份验证后允许用户直接在网站上更改他们的密码。

哦,还有一件事 -忘记 MD5!!!!

于 2012-10-09T13:20:31.147 回答
0

不要覆盖变量$pass

    $pass = rand();
    $md5pass = md5($pass);
    $md5pass = substr($md5pass, 0, 15);
    $md5pass = md5(md5("g3f".$md5pass."rt4"));

MD5 散列特别是使用盐是一种单向过程。你不能逆转它。

任何好的密码系统都不会存储原始密码,而是存储散列副本,然后通过散列输入并比较两者来验证用户输入的正确性。

于 2012-10-09T13:21:34.190 回答
0
        $pass = rand();
        $originalPass = $pass;
        $pass = md5($pass);
        $pass = substr($pass, 0, 15);
        $pass = md5(md5("g3f".$pass."rt4")); 
        echo $originalPass;

或者

    $pass = rand();
    echo $pass;
    $pass = md5($pass);
    $pass = substr($pass, 0, 15);
    $pass = md5(md5("g3f".$pass."rt4")); 
于 2012-10-09T13:21:47.217 回答