作为一名php开发人员,我长期以来一直使用md5散列算法来保护密码数据和生成唯一的散列算法。
然而,在过去的几个月中,我听到了有关md5不再被认为是安全的传言,我想知道为什么?
有哪些密码身份验证替代方案,例如SHA1、PHP 5.5中的password_hash()?我想知道为什么这些替代方案现在被认为是更好的选择,因为对我来说,这些大多数只是另一种散列算法...
作为一名php开发人员,我长期以来一直使用md5散列算法来保护密码数据和生成唯一的散列算法。
然而,在过去的几个月中,我听到了有关md5不再被认为是安全的传言,我想知道为什么?
有哪些密码身份验证替代方案,例如SHA1、PHP 5.5中的password_hash()?我想知道为什么这些替代方案现在被认为是更好的选择,因为对我来说,这些大多数只是另一种散列算法...
md5()
可以被反向解密,您应该停止使用它!简单来说...
在PHP 5.5中,您可以很好地使用password_hash()
和crypt()
,这两个函数目前被认为是更好的选择。
一个password_hash()的简单示例:
<?php
$options = [
'cost' => 12,
];
echo password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options)."\n";
?>
BLOWFISH
算法的crypt
简单示例。if (CRYPT_BLOWFISH == 1) {
echo 'Blowfish: ' . crypt('rasmuslerdorf', '$2a$07$usesomesillystringforsalt$') . "\n";
}
编辑 :
md5()
?像 MD5、SHA1 和 SHA256 这样的哈希算法被设计为非常快速和高效。随着现代技术和计算机设备的发展,通过“暴力破解”这些算法的输出以确定原始输入已变得微不足道。由于现代计算机可以非常快地“反向”这些哈希算法,因此许多安全专业人士强烈建议不要将其用于密码哈希。
password_hash()
?在哈希密码时,最重要的考虑因素是计算开销和盐值。哈希算法的计算开销越大,破解其输出所需的时间就越长。PHP 5.5 提供了一个本地密码哈希 API,即 password_hash(),它以安全的方式处理哈希和验证密码。
password_hash()
函数只在PHP 5.5及以上版本中可用,而在此之前的版本中不可用。 - Shankar Narayana Damodaran它很快。如果攻击者得到了您的数据库备份,他们可能只需要几个小时(也许只需要几分钟)就能破解散列密码——算法越快,每秒尝试次数越多=越不安全。
SHA-256 / SHA-512 是更好的选择,因为它们需要更长的处理时间,因此可以将破解一个哈希所需的时间延长数年之久。虽然不确定黑客们是否会这样做,但我没有时间或耐心去尝试。