我的用户密码丢失了我的md5和salt加密

时间:2014-01-09 20:58:56

标签: php security encryption

我最近一直在创建一个用户管理站点,只需一次登录即可编辑/更改站点的各个方面。我试图创建一个更改密码页面,以便用户显然能够根据需要更改密码,我正在搞乱这个并且完全搞砸了我的md5和盐加密到我无法登录的地步在了。

在密码行的数据库中,我显示了长字符十六进制数字(对应于我输入网站登录的密码,md5功能改变了这个),我删除了更长的密码数据库(因为它不再工作)并放回我的实际密码...因此我能够再次登录,但我的密码没有安全性...我不知道如何获得安全性?< / p>

我的加密页面仍然存在但现在无用......

<?php

    function encrypt($password){
        $salt1="egf";
        $salt2="7yh";
        $password = md5($salt1 . $password . $salt2);
        return $password;
    }

?>

请帮助,任何建议将不胜感激!谢谢

1 个答案:

答案 0 :(得分:2)

让我们分段看你的代码:

function encrypt($password){ // You're not encrypting here at all!
    $salt1="egf"; // Not a salt
    $salt2="7yh"; // Not a salt
    $password = md5($salt1 . $password . $salt2); // MD5 is insecure
    return $password; // Why set to variable then return?
}

您似乎无法理解some fundamental cryptography concepts

  • 加密是一个双向过程;如果您没有加密密码,请使用密码散列函数对其进行哈希处理(例如scrypt,bcrypt,PBKDF2-SHA256)。
  • MD5是一个糟糕的选择;它是一种通用加密哈希函数,不适用于密码。
  • 每位用户必须唯一。拥有静态前缀和后缀更类似于 pepper ,这在安全专家和许多(包括我自己)视图辣椒中都有争议security through obscurity

解决方案:使用password_hash()password_verify()。它是由专家为这个确切的用例设计的。

如果您使用的是旧版本的PHP而不是5.5.0,请升级。如果您不在,请向您的托管服务提供商投诉,然后使用password_compat

不要推出自己的密码存储方案。