PHP中的Md5替代方案?

PHP中的Md5替代方案?,php,security,encryption,md5,Php,Security,Encryption,Md5,对于加密存储在MySQL数据库中的用户数据(如密码和其他安全数据),使用PHP的Md5算法的最佳替代方案是什么?提供了许多更安全的方法(顺便说一句,Md5本身也是如此)。我建议您阅读有关该函数的内容。你也可以去看看。我想这是目前最好的杂烩。Mcrypt提供基于CPU周期的散列。您可以这样使用,您有很多算法来散列数据 hash('sha256', $data); MD5确实不再被推荐。大多数php安装都包含hash扩展。目前,哈希函数的最佳选择是SHA-512。您可以将SHA-512与以下功能一

对于加密存储在MySQL数据库中的用户数据(如密码和其他安全数据),使用PHP的Md5算法的最佳替代方案是什么?

提供了许多更安全的方法(顺便说一句,Md5本身也是如此)。

我建议您阅读有关该函数的内容。你也可以去看看。我想这是目前最好的杂烩。Mcrypt提供基于CPU周期的散列。

您可以这样使用,您有很多算法来散列数据

hash('sha256', $data);

MD5确实不再被推荐。大多数php安装都包含
hash
扩展。目前,哈希函数的最佳选择是SHA-512。您可以将SHA-512与以下功能一起使用:

<?php
    function sha512($string) {
        return hash('sha512', $string);
    }
?>

如果您愿意,还有其他输出尺寸较小的替代方案,如
SHA-256
RIPEMD-160

更新:阅读您更新的问题,我建议使用php函数

试试php hash()函数

示例代码:

$hash = hash('SHA512', $pass);
这使得:

SHA512("The quick brown fox jumps over the lazy dog")
进入:

进一步阅读:
SHA512不是一个糟糕的选择。但不久之后,大多数密码都会被破解。拿使用或。它们抵抗EC2或其他并行处理技术。可能不是免疫的,但有抵抗力

在这种情况下,更好的散列不是更好的原因是MD5中的
ABC
变为一个值,而SHA512中的
ABC
变为一个值。计算所有3个字母的密码是非常困难的。关键是很难做到。这意味着一个缓慢的散列,一个使用大量RAM的散列,和/或一个不容易在EC2上完成的散列

最好的选择是不再单独使用密码。确定您的站点是否真的需要登录,如果需要,请先尝试使用第三方提供商。如果这不是一个选项考虑从RSA密码+令牌。只有在没有其他可行选项的情况下才能单独使用密码

对密码进行哈希运算时,密钥是哈希(密码+salt),salt需要每个用户都是唯一的,并且应该很难猜到或不可能猜到。使用用户名符合第一个标准,比不使用盐或对每个用户使用相同的盐要好,但对每个用户使用唯一的随机盐是更好的选择。理想情况下,在一个单独的数据库中,如果不是在某个位置,则使用它自己的凭据。它也不应该输入用户名,而是输入用户id,甚至是用户id的散列。您希望该数据库能够防止SQL注入。不接受用户未散列的输入是一种很好的方法。您最好让查询本身进行散列。慢?是的,这也是一件好事

盐本身应该包含它能得到的所有难以预测的数据。用户名+用户Id+时间戳+来自dev/uradom的垃圾+最新的tweet,其中包含单词taco。时间越长越好。在这里,SHA512是一个很好的哈希选择

摘要:hash=bcrypt(密码+salt),salt=sha512(用户名+用户id+时间戳+微时间戳+开发/存储位+其他噪声)


如果你在那之后还担心的话。请随意输入b密码。您将获得SHA512的力量,当它破裂时,只会显示一个更难用暴力破解的bcrypted hash。

漩涡效果很好。你应该说你在用它做什么,这取决于你打算用它做什么。对于散列内容来检查重复项,MD5非常棒@邦迪:沙一是不安全的;使用SHA2完全取决于你想做什么。@Alfred Godoy你可能想看看这个:False。sha384更安全:比SHA-256更安全,是的。比SHA-512更安全,否。你在哪里读到的?是否愿意为你不同意的原因提供证据?是的,但你没有讨论哪些更安全以及为什么。
0x07e547d9586f6a73f73fbac0435ed76951218fb7d0c8d788a309d785436bbb642e93a252a954f23912547d1e8a3b5ed6e1bfd7097821233fa0538f3db854fee6