密码哈希函数
在 PHP 5.5 之前,你可以使用兼容包来提供 password_*
功能。如果能够这样做,强烈建议你使用兼容包。
无论有没有兼容包,通过 crypt()
正确的 Bcrypt 功能都依赖于 PHP 5.3.7+, 否则你必须将密码限制为仅限 ASCII 的字符集。
注意: 如果你使用 PHP 5.5 或更低版本,则使用不受支持的 PHP 版本,该版本不再接收任何安全更新。尽快更新,之后可以更新密码哈希值。
算法选择
安全算法
- **** 只要你使用键拉伸来增加哈希计算时间, bcrypt 就是你的最佳选择,因为它会使暴力攻击极其缓慢 。
- argon2 是另一个选项,将在 PHP 7.2 中提供 。
不安全的算法
以下散列算法不安全或不适合用途,因此不应使用。它们从不适合密码散列,因为它们是为快速摘要而设计的,而不是缓慢而难以强制密码哈希。
如果你使用其中任何一个,甚至包括盐,你应该切换到推荐的安全算法之一**,尽快**。
算法被认为是不安全的:
- MD4 - 1995 年发现的碰撞攻击
- MD5 - 2005 年发现的碰撞攻击
- SHA-1 - 2015 年发生的碰撞袭击
有些算法可以安全地用作消息摘要算法来证明真实性,但绝不能用作密码散列算法 :
- SHA-2
- SHA-3
注意,强大的哈希值如 SHA256 和 SHA512 是完整且稳健的,但是使用 bcrypt 或 argon2 哈希函数通常更安全,因为对这些算法的暴力攻击对于经典计算机来说要困难得多。