2020-08-26 06:42:58
MD5 确实已不再安全,PHP 5.5 引入的 password_hash() 和 crypt()(如 BLOWFISH 算法)是更安全的替代方案,应优先使用这些现代密码哈希方法。
为什么 MD5 不再安全?
核心优势:
自适应计算成本:通过 cost 参数控制哈希计算的复杂度(如 cost=12),计算越复杂,暴力破解时间越长。
自动加盐(Salt):每次生成哈希时自动添加随机盐值,防止彩虹表攻击。
算法升级支持:默认使用 BCRYPT 算法,未来可无缝切换为更安全的算法(如 Argon2)。
代码示例:
$options = ['cost' => 12];$hashedPassword = password_hash("user_password", PASSWORD_BCRYPT, $options);核心优势:
强加密算法:BLOWFISH($2a$ 前缀)是专门为密码哈希设计的算法,安全性高于 MD5。
盐值固定格式:需手动指定盐值(如 $2a$07$usesomesillystringforsalt$),但盐值长度和格式需严格遵循规范。
代码示例:
if (CRYPT_BLOWFISH == 1) { $hashedPassword = crypt('user_password', '$2a$07$usesomesillystringforsalt$');}MD5 的安全性已无法满足现代应用需求,PHP 5.5 引入的 password_hash() 和 crypt()(BLOWFISH)提供了更强大的防护。开发者应立即停止使用 MD5,并迁移至 password_hash(),以低成本实现高安全性。

行动建议:检查代码库中所有密码存储逻辑,将 MD5 替换为 password_hash(),并确保验证环节使用 password_verify()。安全无小事,及时升级是关键!