PHP Securitywise为什么md5不再被认为是安全的?

时间:2014-03-03 06:09:35

标签: php security

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

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

什么是密码验证替代品,例如PHP 5.5中的SHA1,password_hash()?我想知道为什么这些替代品现在被认为是更好的选择,因为对我来说,大多数这些只是另一种哈希算法...

2 个答案:

答案 0 :(得分:2)

因为许多网站和research studies已证明md5()可以撤销,您应该停止使用它!

简单来说......

enter image description here

你可以很好地利用PHP中的password_hash() 5.5 以及crypt()这些是目前为止考虑的更好的。{/ p>

从PHP手册

中获取的password_hash()的简单说明
<?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

答案 1 :(得分:1)

这很快。如果攻击者设法获得数据库的副本,攻击者可以在几个小时(可能是几分钟)内破解一个哈希密码 - 算法越快,每秒的尝试次数越多=更不安全。

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