php 8.1 比 7.4 新增 sha3-224、sha3-256、sha3-384、sha3-512、sha512/224、sha512/256、crc32c 七个算法,强化 hmac 安全限制并严格校验参数类型。

PHP 7.4 和 8.1 在 hash_algos() 支持的算法列表上有明显扩展,核心差异在于 8.1 新增了 SHA-3 系列、SHA-512 变体及更安全的哈希算法,同时强化了对非加密算法用于 HMAC 的限制。
新增的加密算法(PHP 8.1 独有)
PHP 8.1 在 7.4 基础上新增以下加密哈希算法,全部属于 NIST 标准认可的现代安全算法:
- sha3-224、sha3-256、sha3-384、sha3-512 —— SHA-3 标准(Keccak),抗量子计算能力更强
- sha512/224 和 sha512/256 —— 截断式 SHA-512,输出长度更短但保留高安全性
-
crc32c —— 虽属校验和类,但因硬件加速支持广泛,PHP 7.4 尚未纳入
hash_algos()列表(7.4 支持 crc32/crc32b,但不返回 crc32c)
被移除或受限的算法使用场景
不是算法本身被删除,而是调用规则收紧:
- PHP 7.2 起已禁止在
hash_hmac()或hash_init(..., HASH_HMAC)中使用adler32、crc32、fnv1a64等非加密算法;PHP 8.1 继续严格执行该限制,传入会直接抛出ValueError -
md2、md4、sha1等弱算法仍在两个版本的hash_algos()输出中,但 PHP 8.0+ 对hash_hmac()的参数类型校验更严:若$data为null或数组,7.4 可能静默转字符串,8.1 直接报TypeError
算法分类与安全建议保持一致
两版均延续三类划分逻辑,但 8.1 更强调实践引导:
-
校验和类(如
crc32b,adler32):仅适合数据完整性校验,不可用于密码、签名等安全场景 -
非加密类(如
xxh32,murmur3a):PHP 8.1 新增支持,但明确标注“不适用于加密” -
加密类(如
sha256,sha3-256,whirlpool):推荐用于 HMAC、PBKDF2、HKDF 等密钥派生场景
实际验证方式
运行 print_r(hash_algos()) 即可查看当前环境完整列表。PHP 8.1 默认比 7.4 多出至少 7 个算法名称,且所有新增项均为加密强度达标的新标准。若项目需长期兼容,应避免硬编码算法名,改用 in_array('sha3-256', hash_algos()) 动态检测。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











