PHP中password_hash的PASSWORD_DEFAULT对应哪种密码哈希算法
password_hash() 中 PASSWORD_DEFAULT 的默认算法说明 首先明确核心结论:PASSWORD_DEFAULT 根本不是一个独立的哈希算法,它只是PHP提供的一个「随版本自动更新的默认算法标记常量」,永远指向当前PHP版本官方认定的最适合密码存储的安全哈希算法,不存在PHP专属叫这个名字的哈希实现。
它指向的所有算法都是行业通用的公开标准密码哈希算法,和md5、sha512同属公开散列标准范畴,但比这俩专门针对密码存储场景做了安全设计(自带随机盐、支持调整计算成本抗暴力破解),不同PHP版本对应的默认算法如下:
- PHP 5.5.0 到 PHP 7.3.x 全版本:默认对应
bcrypt(对应常量PASSWORD_BCRYPT),生成的哈希值固定60位,和其他编程语言实现的bcrypt结果完全互通兼容,不是PHP私有算法。 - PHP 7.4.0 到 PHP 8.0.x 全版本:官方曾计划将默认算法替换为Argon2i,最终没有在正式版本落地,这个阶段默认算法仍然是bcrypt。
- PHP 8.1.0 及以上更新版本:默认算法正式替换为
Argon2id(对应常量PASSWORD_ARGON2ID),这是目前全行业公认安全性最高的密码专用哈希算法之一,同样是跨语言通用的公开标准,不是PHP专属实现。
考试需要记的高频考点:
- 不要把
PASSWORD_DEFAULT当成独立算法,它只是默认算法的别名,会随PHP版本升级自动切换- 所有被设为默认的算法都是公开通用标准,不存在PHP私有哈希的情况
- 如果考题没有指定PHP版本,默认考察的标准答案是bcrypt,这是
password_hash函数从诞生到沿用最久的默认值
如果要在本地验证当前版本的默认算法,直接执行var_dump(PASSWORD_DEFAULT);,输出的常量值和对应算法一一对应:值为1就是bcrypt,值为3就是Argon2id。
内容的提问来源于stack exchange,提问作者Nutzer678
相关产品推荐
相关产品推荐

