本文目录导读:

我来帮你了解 PHP 中的摘要功能。
PHP 摘要的主要类型
MD5 摘要(不推荐用于安全用途)
$text = "Hello World"; $hash = md5($text); echo $hash; // b10a8db164e0754105b7a99be72e3fe5
SHA1 摘要(不推荐用于安全用途)
$text = "Hello World"; $hash = sha1($text); echo $hash; // 0a4d55a8d778e5022fab701977c5d840bbc486d0
SHA-256/SHA-512(推荐)
$text = "Hello World";
$hash256 = hash('sha256', $text);
$hash512 = hash('sha512', $text);
echo $hash256;
echo $hash512;
bcrypt 密码哈希(最推荐用于密码)
$password = "user123";
// 创建哈希
$hash = password_hash($password, PASSWORD_BCRYPT);
echo $hash; // $2y$10$...
// 验证密码
if (password_verify($password, $hash)) {
echo "密码正确";
}
Argon2(PHP 7.2+,现代推荐)
$password = "user123"; // 创建哈希 $hash = password_hash($password, PASSWORD_ARGON2I); // 或 $hash = password_hash($password, PASSWORD_ARGON2ID); echo $hash;
实用示例
// 计算文件 MD5
$file_hash = md5_file("document.pdf");
// 计算文件 SHA256
$file_hash = hash_file('sha256', "document.pdf");
HMAC(带密钥的哈希)
$data = "重要信息";
$key = "secret_key";
$hmac = hash_hmac('sha256', $data, $key);
echo $hmac;
完整例子:密码安全存储
class UserAuth {
public static function hashPassword($password) {
// 使用 bcrypt 并自定义成本
$options = [
'cost' => 12, // 越高越安全,但速度越慢
];
return password_hash($password, PASSWORD_BCRYPT, $options);
}
public static function verifyPassword($password, $hash) {
return password_verify($password, $hash);
}
}
// 使用
$hash = UserAuth::hashPassword("user123");
echo "哈希值: " . $hash;
if (UserAuth::verifyPassword("user123", $hash)) {
echo "验证成功";
}
安全建议
| 用途 | 推荐算法 | 说明 |
|---|---|---|
| 密码存储 | Argon2 或 bcrypt |
自动加盐,可调成本 |
| 数据完整性 | SHA-256 或 SHA-3 |
无密钥校验 |
| API 签名 | HMAC-SHA256 |
带密钥验证 |
| 文件校验 | SHA-256 |
防篡改 |
不推荐的做法
// ❌ 不要这样 $hash = md5($password); // 彩虹表攻击 $hash = sha1($password); // 不够安全 $hash = md5($password . "salt"); // 自定义加盐不安全 // ✅ 应该这样 $hash = password_hash($password, PASSWORD_ARGON2ID);
代码检测
// 检查支持的哈希算法 print_r(hash_algos()); // 检查密码哈希信息 $info = password_get_info($hash); print_r($info);
有什么具体的摘要需求吗?我可以提供更针对性的代码示例。