【问题标题】:PHP Securitywise why md5 is not considered safe anymore? [duplicate]PHP Securitywise 为什么 md5 不再被认为是安全的? [复制]
【发布时间】:2014-04-04 02:11:30
【问题描述】:

长期以来,作为一名 php 开发人员,我一直在使用 md5 哈希算法来保护密码数据并生成独特的哈希算法。

但是从最近几个月我听到谣言说 md5 不再被认为是安全的,我想知道为什么?

PHP 5.5 中的密码验证替代方法是什么,即 SHA1、password_hash()?而且我想知道为什么现在这些替代方案被认为是更好的选择,因为对我来说,其中大部分又只是另一种散列算法......

【问题讨论】:

  • @Fred-ii- 历史在哪里说明了它为什么不再安全?
  • 您没有从我上面提供的链接中阅读任何内容吗?
  • Read this answer then on SO255k 成员提供。
  • 或者,您可以继续使用它,然后最终自己找出答案。艰难地学习是学习的一种方式。祝你好运。

标签: php security


【解决方案1】:

因为很多网站和research studies已经证明md5()是可以反转的,你应该停止使用它!

简单来说......

您可以很好地使用 PHP 5.5 中的 password_hash() 以及 crypt(),这些是目前认为更好的。

password_hash() 的简单图解摘自 PHP 手册

<?php
$options = [
    'cost' => 12,
];
echo password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options)."\n";
?>

crypt使用BLOWFISH算法的简单说明

if (CRYPT_BLOWFISH == 1) {
    echo 'Blowfish:     ' . crypt('rasmuslerdorf', '$2a$07$usesomesillystringforsalt$') . "\n";
}

EDIT :

为什么你不应该使用md5()

MD5、SHA1 和 SHA256 等哈希算法旨在 非常快速和高效。用现代技术和计算机 设备,“蛮力”输出这些已变得微不足道 算法,以确定原始输入。因为如何 很快,现代计算机可以“反转”这些散列算法,许多 安全专家强烈建议不要使用密码 散列。

为什么在 PHP 5.5 上选择password_hash()

在散列密码时,两个最重要的考虑因素是 计算费用和盐。计算量越大 散列算法昂贵,暴力破解所需的时间越长 强制其输出。 PHP 5.5 提供了一个原生密码哈希 API,它是 password_hash() 以安全的方式安全地处理哈希和验证密码 方式。

Source

【讨论】:

  • 您也可以考虑使用bcrypt。对于我的目的,我发现它非常安全。 link to the github
  • 不。你的答案很好,只需添加 my2cp :)
  • @Fred-ii-,这是因为 password_hash() 可用于 PHP 5.5 :P ,而不是之前的版本。
  • 是的,我注意到了,即便如此,您也不必费尽心思,但非常非常好!我投票结束,因为“不清楚在问什么”。 @ShankarDamodaran - 似乎这里没有令人愉快的地方。顺便说一句有趣的图形!大声笑
  • @Shankar Damodaran:恕我直言:无需复制内容,也无需复制 PHP 手册(您甚至会错过给予学分)。还有你链接的研究,我想知道它是如何适合的。而你发布的图像,对于我的口味来说,它的答案非常低。特别是由于重复的材料。
【解决方案2】:

速度很快。如果攻击者设法获得您的数据库副本,他们可以在短短几个小时(可能几分钟)内破解散列密码 - 算法越快,每秒尝试次数越多 = 越不安全。

SHA-256/SHA-512 是更好的选择,因为它们需要更长的处理时间,因此它们可能会增加数年的时间来破坏哈希。不确定那里的黑客,但我没有时间或耐心去尝试。

【讨论】:

    猜你喜欢
    • 2014-03-26
    • 2011-08-13
    • 1970-01-01
    • 2019-02-07
    • 2011-08-25
    • 1970-01-01
    • 2021-02-04
    • 2014-03-08
    • 2012-11-19
    相关资源
    最近更新 更多