PHP哈希算法有哪些新选择

wen PHP项目 1

本文目录导读:

PHP哈希算法有哪些新选择

  1. 信息摘要(普通哈希)的新算法
  2. 密码哈希(安全哈希)的新选择
  3. 密钥哈希(HMAC与签名)的新算法
  4. 性能与安全性变化(PHP 8.x)
  5. 总结:现在该用什么?

在 PHP 7.4 到 PHP 8.x 的演进中,哈希算法(Hash Algorithms)主要新增了以下几类新选择或重要改进,尤其是在 信息摘要密码哈希密钥哈希 三个层面:


信息摘要(普通哈希)的新算法

PHP 8.1 开始引入 MurmurHash3xxHash 系列,这些算法重点优化 速度 而非密码学安全性,适合做哈希表、数据分片或文件校验。

算法 引入版本 特点
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.1hash() 函数开始支持 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 并行、自动加盐
快速校验/哈希表 xxh128murmur3f 极其快,碰撞率低
消息认证 / 签名 sodium_crypto_auth() 或 HMAC-SHA3-256 现代安全,防篡改
文件完整性 xxh64 (快速) / sha256 (安全) 平衡速度与可靠性
兼容旧系统 sha256sha512 广泛支持,性能尚可

重要提醒MD5SHA1SHA224 等算法在 PHP 8.x 中虽然仍然可用,但 不推荐用于新项目(碰撞攻击风险已公开验证),加密场景请务必使用 Argon2id、SHA-2(至少 256 位)、SHA-3 或 Sodium

抱歉,评论功能暂时关闭!