2014-10-08 51 views
-2

我写个人使用(我希望,但不认为任何人都不会去那里)网站,并开发了下面的算法:我的哈希算法有多安全?

function encryptPassword($username, $password) { 
    $username=md5($username); 
    $password=md5($password); 

    $newpass = substr($username, 0, 5) . $password . substr($username, 5); 
    $newpass = md5($newpass); 

    return $newpass; 
} 

因为它仍然是一种“知道密码,你在'类似系统(像往常一样),我认为将密码隐藏在数据库中会是一个更好的主意。

我以前使用过简单的MD5x1算法(基本上:md5(pass)并完成),但随后访问数据库的人可以很容易地将其反向散列。这样我不认为你能够反转哈希这件事。

+1

一如既往的这些事情:失败。不要重新发明轮子。 – 2014-10-08 17:24:02

+0

哈希算法应该是安全的吗?我认为他们只是应该执行散列而不是某种类型的加密。 – j08691 2014-10-08 17:24:42

+3

这是_thoroughly_不安全。 – SLaks 2014-10-08 17:24:44

回答

5

不是。

  1. MD5在密码学上很弱。
  2. 盐应该是随机的,而不是来源于已知的值。
  3. 一轮哈希是微不足道的打破这些天。

解以上:

  1. 使用更好的算法,优选SHA2或更好。
  2. 生成随机盐。
  3. 哈希多轮

哦,等等,已经有内置到PHP的整个库做这个,除了方式更好。它是password_hash(),如果你使用的是早于5.5版本的PHP,当它被实现时,有password_compat,它可以早于5.3.7支持它,并且如果仍然不起作用,你真的需要更新你的PHP安装。

最后,除非你有密码学方面的大专水平的教育,否则你绝不应该尝试“推出你自己的”哈希或加密方案。 99%的时间会比使用行业标准的系统安全得多。

+0

对所有上述。增加:成功的哈希算法向公众发布,由安全专家审查,然后最终(也许!)推荐用于生产现场。不要推出自己的加密。 – 2014-10-08 19:31:32

+0

@Sammitch发布了正确的答案。请接受它。 :) – 2014-10-09 02:51:10