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

PHP 中实现字符串哈希,推荐直接使用内置函数 hash() 或 password_hash()(用于密码),而非手动实现算法。手动实现不仅易出错、性能差,还可能引入安全风险。
常用安全哈希:hash() 函数
适用于校验、签名等非密码场景,支持多种算法:
-
SHA-256:
hash('sha256', 'hello')→ 返回 64 字符十六进制字符串 -
BLAKE2b(PHP 7.2+):
hash('blake2b', 'hello', false),速度快且抗碰撞性强 - 输出二进制格式可传
true作为第三个参数,如hash('md5', $str, true)
密码哈希:必须用 password_hash()
对用户密码,绝不能用 md5 或 sha1 等简单哈希。应使用:
C编写,实现字符串摘要、文件摘要两个功能。里面主要包含3个文件: Md5.cpp、Md5.h、Main.cpp。其中Md5.cpp是算法的代码,里的代码大多是从 rfc-1321 里copy过来的;Main.cpp是主程序。
-
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'),返回整数,速度快但无加密强度,不可用于防篡改或认证。










