PHP 怎么PHP 摘要

wen PHP项目 2

本文目录导读:

PHP 怎么PHP 摘要

  1. PHP 摘要的主要类型
  2. 实用示例
  3. 安全建议
  4. 不推荐的做法
  5. 代码检测

我来帮你了解 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 "验证成功";
}

安全建议

用途 推荐算法 说明
密码存储 Argon2bcrypt 自动加盐,可调成本
数据完整性 SHA-256SHA-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);

有什么具体的摘要需求吗?我可以提供更针对性的代码示例。

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