PHP MD5(MD5)哈希

问题描述:

已经有人说md5(md5)比md5好,但有人说它没有做任何事情,有人可以帮助如何使这更安全吗?我对混合反馈感到困惑。PHP MD5(MD5)哈希

$query="INSERT INTO `users` (`email`, `password`) 
    VALUES('".mysqli_real_escape_string($link, $_POST['email'])."', 
      '".md5(md5($_POST['email']).$_POST['password'])."' 
     )"; 
+4

你不应该使用md5来存储密码。改用bcrypt。 – Afsa 2014-09-24 11:50:40

+1

单个md5()散列的熵是每个数据字节256个潜在的位组合;当你md5()第二次被限制为第一个散列的字符集时,即每个字节26个字母数字+10个数字,所以散列不止一次通过减少熵增加了碰撞的机会 – 2014-09-24 11:50:45

+0

有人说md5(md5在这段代码中毫无价值......是真的吗?如果是这样,有没有办法让这段代码更安全? – Anthony 2014-09-24 11:51:02

MD5将产生32个字符的散列 双散列东西仍然有32个字符的哈希值,所以只是不双MD5的东西! 如果你想要更长的哈希值(让通话更安全),你应该使用类似sha512,惠而浦等 请参阅hash() function在PHP文档中的例子。

所以不是MD5(MD5($变量)),你应该使用哈希( 'SHA512',$变量)

还要注意,长哈希意味着更长的处理时间(=更多的CPU!)

+3

哈希的长度并不是真正的情况,更安全 – 2014-09-24 11:55:06

不要使用md5哈希来存储密码。请将password_hash函数与bcrypt一起使用。请参阅:http://php.net/manual/de/function.password-hash.php

password_hash($password, PASSWORD_BCRYPT, array('cost' => 13)); 

对于老版本PHP看看https://github.com/ircmaxell/password_compat

+0

+1。正如我已经说过的,如果你使用'PHP> = 5.5',我强烈推荐使用'password_hash'。 'Md5'很久没有效了。 – Debflav 2014-09-24 11:59:22

MD5是不安全的文本再登512位或64字节,因为你会发现在IST的数学组。你做什么是哈希散列。 哈希比64Byte更短。所以你有一个解决方法。如果它是安全的......我不会为此给我这个手。 您可以在Wiki 下面找到更多信息。最好的方法是不要使用MD5。

+0

Mark Ba​​ker在维基链接中找到了MD5制动器上的文档链接,在那里您可以找到MD5的功能,您可以在其中找到MD5编码块的字符串长度。而且长度也是512Bit。 如果在现场演示中看到它CCC 2009 – 2014-09-24 12:06:04

+0

我根本找不到那个链接;是的,MD5的编码块大小是512位,但我无法在任何链接的页面中找到任何内容,说明您的建议。如果两个哈希值被赋予一个共同的前缀值为128字节的数据块,并在64字节的边界上对齐,则会出现冲突问题。 – 2014-09-24 12:16:56

+0

是的,你是对的,你需要4个编码块的最小长度。 编码块长度= 512位 - > 64字节 因此,如果仅使用一个块,则“安全”.OK? – 2014-09-24 12:19:15