本文目录导读:

在 PHP 7.4 到 PHP 8.x 的演进中,哈希算法(Hash Algorithms)主要新增了以下几类新选择或重要改进,尤其是在 信息摘要、密码哈希 和 密钥哈希 三个层面:
信息摘要(普通哈希)的新算法
PHP 8.1 开始引入 MurmurHash3 和 xxHash 系列,这些算法重点优化 速度 而非密码学安全性,适合做哈希表、数据分片或文件校验。
| 算法 | 引入版本 | 特点 |
|---|---|---|
murmur3a (32-bit) |
PHP 8.1+ | 非加密哈希,极快,适合分散性要求高的场景(如哈希表、Bloom Filter) |
murmur3c (128-bit x86) |
PHP 8.1+ | MurmurHash3 的 128 位变体,速度比 MD5 快 3-4 倍 |
murmur3f (128-bit x64) |
PHP 8.1+ | 针对 64 位架构优化的 128 位版本 |
xxh32 |
PHP 8.1+ | xxHash 32 位,比 CRC32 快,但冲突率更低 |
xxh64 |
PHP 8.1+ | 64 位 xxHash,适合大文件或文本块快速摘要 |
xxh3 |
PHP 8.1+ | 最新一代 xxHash,速度是所有非加密哈希中最快的之一 |
xxh128 |
PHP 8.1+ | 128 位 xxHash,兼具速度和低碰撞率 |
使用方式:通过 hash() 或 hash_algos() 检查可用算法。
// PHP 8.1+ 可用
echo hash('xxh64', 'hello'); // 输出类似 "8c3e7c7b51e6f6a5"
密码哈希(安全哈希)的新选择
PHP 8.0 和 8.4 对密码哈希扩展做了重要更新,这是最值得注意的安全改进:
| 算法/常量 | 引入版本 | 说明 |
|---|---|---|
PASSWORD_ARGON2ID |
PHP 7.3(实际生产推广在 8.x) | 推荐使用的 Argon2 变体,抗侧信道攻击强于 Argon2i |
PASSWORD_BCRYPT 增加 cost上限提升 |
PHP 8.0 | 允许 cost 参数从 4~31 扩展到 4~32(更安全但更慢) |
| Sodium(libsodium)密码哈希 | PHP 7.2 集成,0+ 成为核心扩展 | sodium_crypto_pwhash_str() 使用 Argon2id,比 password_hash() 更灵活 |
| PHP 8.4(未发布预期) | 可能引入 新的 password_hash 选项或算法,目前可关注 RFC。 | 社区讨论过是否将 Argon2 设为默认 |
推荐做法(自 PHP 8.0 起):
// 自动使用最安全的默认算法(目前是 bcrypt,未来可能变成 argon2id) $hash = password_hash($password, PASSWORD_DEFAULT); // 显式使用 argon2id(需 PHP 7.3+,推荐 8.x) $hash = password_hash($password, PASSWORD_ARGON2ID);
密钥哈希(HMAC与签名)的新算法
PHP 8.0+ 支持 SHA-3 系列 的 HMAC 和普通哈希,这是 NIST 标准的现代加密哈希:
| 算法 | 引入版本 | 说明 |
|---|---|---|
sha3-224 |
PHP 7.1(基于 Keccak) | SHA-3 224 位 |
sha3-256 |
PHP 7.1 | 推荐用于 HMAC |
sha3-384 |
PHP 7.1 | 安全性中等 |
sha3-512 |
PHP 7.1 | 最高安全性(但比 SHA-2 慢) |
在 PHP 8.0 中它们的内部实现经过优化,性能比早期版本提升显著。
HMAC 示例:
$key = 'secret-key'; $data = 'message'; // PHP 8.0+ 推荐用 sodium 代替传统 HMAC(更快、更安全) $hmac = sodium_crypto_auth($data, $key);
性能与安全性变化(PHP 8.x)
- PHP 8.1:
hash()函数开始支持hash_hmac_algos()返回所有可用 HMAC 算法。 - PHP 8.3:修复了某些情况下哈希算法的内存泄漏问题,并优化了
murmurhash的种子处理。 - EVP 支持:
openssl_digest()在 PHP 8.0+ 中底层切换为 OpenSSL 3.x 实现,对 SHA-3 和 Blake2 支持更好。
现在该用什么?
| 场景 | 推荐算法(PHP 8.x) | 原因 |
|---|---|---|
| 密码存储 | password_hash() 配合 PASSWORD_ARGON2ID |
抗穷举、抗 GPU 并行、自动加盐 |
| 快速校验/哈希表 | xxh128 或 murmur3f |
极其快,碰撞率低 |
| 消息认证 / 签名 | sodium_crypto_auth() 或 HMAC-SHA3-256 |
现代安全,防篡改 |
| 文件完整性 | xxh64 (快速) / sha256 (安全) |
平衡速度与可靠性 |
| 兼容旧系统 | sha256 或 sha512 |
广泛支持,性能尚可 |
重要提醒:
MD5、SHA1、SHA224等算法在 PHP 8.x 中虽然仍然可用,但 不推荐用于新项目(碰撞攻击风险已公开验证),加密场景请务必使用 Argon2id、SHA-2(至少 256 位)、SHA-3 或 Sodium。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播