作为一名php开发人员,我一直在使用md5哈希算法来保护密码数据并生成独特的哈希算法。
然而,从最近几个月我听到传言说md5不再被认为是安全的,我想知道为什么?
什么是密码验证替代品,例如PHP 5.5中的SHA1,password_hash()?我想知道为什么这些替代品现在被认为是更好的选择,因为对我来说,大多数这些只是另一种哈希算法...
答案 0 :(得分:2)
research studies
已证明md5()
可以撤销,您应该停止使用它!简单来说......
你可以很好地利用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被设计为 非常快速和有效。用现代技术和计算机 设备,它已成为“蛮力”这些产出的琐碎 算法,以确定原始输入。因为如何 很快,现代计算机可以“反转”这些哈希算法 安全专业人士强烈建议不要使用密码 散列。
password_hash()
?当散列密码时,最重要的两个考虑因素是 计算费用和盐。计算越多 昂贵的哈希算法,花费的时间越长 强迫它的输出。 PHP 5.5提供了一个本机密码哈希API,即 password_hash() 安全地处理散列和验证密码 方式。
答案 1 :(得分:1)
这很快。如果攻击者设法获得数据库的副本,攻击者可以在几个小时(可能是几分钟)内破解一个哈希密码 - 算法越快,每秒的尝试次数越多=更不安全。
SHA-256 / SHA-512是更好的选择,因为它们需要更长的时间来处理,因此它们可能会花费数年的时间来打破哈希。不确定那里的黑客,但我没有时间或耐心去尝试。