- A+

PHP中md5()函数用于计算字符串的MD5散列值,常被用来对密码或其他敏感信息进行加密存储。虽然它曾经广泛使用,但如今在安全性要求较高的场景中已不再推荐直接用于密码加密。
md5函数的基本用法
语法:
md5(string $str, bool $raw_output = false): string
参数说明:
- $str:要加密的字符串。
- $raw_output:可选参数。为true时返回16字节长的原始二进制数据;默认false返回32位十六进制字符串。
示例:
$hash = md5('hello');
echo $hash; // 输出:5d41402abc4b2a76b9719d911017c592
如果设置raw_output=true:
立即学习“PHP免费学习笔记(深入)”;
$hash = md5('hello', true);
echo bin2hex($hash); // 同样得到十六进制结果
常见用途:用户密码存储
过去很多系统会这样处理用户密码:
$password_hash = md5($_POST['password']);
// 存入数据库
但这种方式存在严重安全隐患:
- MD5是**不可逆**但**可破解**的算法,攻击者可通过彩虹表或暴力破解快速还原常见密码。
- 相同密码生成相同哈希值,容易暴露用户密码规律。
- 现代计算能力下,每秒可尝试数亿次MD5碰撞。
安全替代方案建议
不要再将md5()用于密码加密。应使用PHP内置的安全哈希函数:

AI艺术绘画生成器

35
查看详情

- password_hash():专门设计用于密码哈希。
- password_verify():验证哈希后的密码。
推荐做法:
$hashed_password = password_hash('user_password', PASSWORD_DEFAULT);
// 存入数据库
验证时:
if (password_verify('user_input', $hashed_password)) {
echo "登录成功";
}
这些函数底层使用bcrypt或argon2算法,支持自动加盐(salt),极大提升安全性。
MD5适用场景与注意事项
尽管不适合密码加密,md5()仍可用于非安全敏感的场景:
- 文件完整性校验(如下载包校验)
- 缓存键生成
- 去重标识等低风险用途
注意事项:
- 不要单独使用MD5保护用户密码或敏感数据。
- 即使加盐(如
md5($password . $salt)),也无法根本解决其脆弱性。 - 避免使用静态盐值,更不应明文存储盐。
- 注意PHP中
md5()不会处理数组,传入数组会报错或返回null。
基本上就这些。虽然md5()使用简单,但在安全领域已被淘汰。正确选择加密方式,才能有效保护用户数据。




