PHP 字符串哈希算法实现

4次阅读

推荐使用php内置hash()或password_hash()函数实现字符串哈希,避免手动实现;hash()适用于校验等非密码场景(如sha256、blake2b),password_hash()用于密码哈希(推荐argon2id),验证用password_verify()。

PHP 字符串哈希算法实现

PHP 中实现字符串哈希,推荐直接使用内置函数 hash()password_hash()(用于密码),而非手动实现算法。手动实现不仅易出错、性能差,还可能引入安全风险。

常用安全哈希:hash() 函数

适用于校验、签名等非密码场景,支持多种算法:

  • SHA-256hash('sha256', 'hello') → 返回 64 字符十六进制字符串
  • BLAKE2b(PHP 7.2+):hash('blake2b', 'hello', false),速度快且抗碰撞性强
  • 输出二进制格式可传 true 作为第三个参数,如 hash('md5', $str, true)

密码哈希:必须用 password_hash()

对用户密码,绝不能用 md5sha1 等简单哈希。应使用:

  • password_hash($password, PASSWORD_ARGON2ID)(PHP 7.2+,推荐)
  • password_hash($password, PASSWORD_DEFAULT)(当前默认为 bcrypt,向后兼容)
  • 验证时统一用 password_verify($input, $hash),无需关心算法细节

不推荐手动实现的常见误区

例如自己写 MD5 循环加盐、拼接字符串再 hash——这并不增强安全性,反而可能破坏标准实现的防御机制(如 bcrypt 的自适应成本因子)。PHP 内置函数已由专家审计,覆盖加盐、迭代、防时序攻击等关键点。

立即学习PHP免费学习笔记(深入)”;

简单校验用途:crc32(仅限非安全场景)

如缓存键生成或内部数据一致性检查,可考虑 crc32('String'),返回整数,速度快但无加密强度,不可用于防篡改或认证。

text=ZqhQzanResources