什么是MD5算法的最佳替代品用于PHP加密密码和其他安全数据的用户数据,存储在MySQL数据库?
Answer 1:
SHA512是不是一个可怕的选择。 但它是破解口令的长度大部分之前,不会很长。 以杰夫的建议 。 使用bcrypt或PBKDF2 。 它们是EC2或其他并行处理技术有抗性。 也许不能幸免,但耐药。
究其原因一个更好的哈希值是在这种情况下,没有更好的是ABC
在MD5成为一个价值和ABC
在SHA512成为一个值。 计算所有3个字母的密码是为SHA512其实很容易,它是为MD5 。 关键是要用心去做。 这意味着一个缓慢的哈希值,一个使用了大量的RAM,和/或一个不能在EC2上轻松完成。
最好的选择是在所有不使用密码孤单了。 决定是否真的需要登录为您的网站,如果是这样,首先尝试使用第三方提供商。 如果这不是一个选项考虑密码+从RSA令牌。 只有当你有没有其他可行的选择使用密码孤单。
当散列密码关键是散列(密码+盐)和盐必须是每个用户特有的,并且还应该是困难或不可能的猜测。 使用用户名满足第一标准和比无盐或每个用户的相同的盐较好, 但对于每个用户的唯一随机盐是更好的选择 。 理想的情况是在一个单独的数据库中,如果没有位置,有自己的凭据。 还应该没有突起上的用户名,但在USER_ID或USER_ID的甚至一个哈希值。 你想该数据库是SQL注入的证明。 不接受来自未散列的用户输入是做到这一点的好办法。 而你将是明智的让查询本身做的散列。 慢? 是的,这也是一件好事。
本身应该包含所有的辛勤盐预测数据也可以得到。 用户名+用户ID +时间戳+从开发/ urandom的+在它的词塔科最新的鸣叫垃圾。 越长越好。 SHA512哈希是一个很好的选择在这里。
总结:散列= bcrypt(密码+盐),盐= SHA512(用户名+ USER_ID +时间戳+ microtimestamp + dev的/ urandom的比特+其它噪声)。
如果你毕竟仍感到担忧。 随意SHA512的bcrypted密码。 您将获得SHA512的实力,这破获时只揭示了一个更难蛮力bcrypted哈希值。
Answer 2:
尝试PHP的散列()函数http://php.net/manual/en/book.hash.php
示例代码:
$hash = hash('SHA512', $pass);
这将打开这样的:
SHA512("The quick brown fox jumps over the lazy dog")
成:
0x07e547d9586f6a73f73fbac0435ed76951218fb7d0c8d788a309d785436bbb642e93a252a954f23912547d1e8a3b5ed6e1bfd7097821233fa0538f3db854fee6
延伸阅读: http://en.wikipedia.org/wiki/SHA-2
Answer 3:
MD5确实不推荐了。 大多数PHP安装包括了hash
扩展。 对于散列函数最好的选择将是目前SHA-512。 您可以使用SHA-512具有以下功能:
<?php
function sha512($string) {
return hash('sha512', $string);
}
?>
有有,如果你希望更小的输出大小,如其他替代SHA-256
或RIPEMD-160
。
更新:读你更新的问题,我建议PHP 隐窝功能。
Answer 4:
您可以使用哈希这样,你有足够的算法的散列数据。
hash('sha256', $data);
Answer 5:
这个Mcrypt提供了大量的更安全的方法(以及MD5本身,顺便说一句)。
Answer 6:
我建议去阅读有关哈希函数。 你可以去了解这个Mcrypt也。 这是现在我想最好的哈希的事情。 这个Mcrypt提供基于CPU周期散列。