当前位置:首页 > PHP

php实现hmac

2026-01-30 04:03:26PHP

PHP 实现 HMAC

HMAC(Hash-based Message Authentication Code)是一种基于哈希函数的消息认证码算法,常用于验证数据的完整性和真实性。PHP 提供了内置函数 hash_hmac() 来方便地生成 HMAC。

基本用法

使用 hash_hmac() 函数生成 HMAC 的语法如下:

$hmac = hash_hmac($algo, $data, $key, $binary = false);
  • $algo:哈希算法名称(如 sha256, md5, sha1 等)。
  • $data:需要计算 HMAC 的原始数据。
  • $key:用于生成 HMAC 的密钥。
  • $binary:可选参数,默认为 false。若为 true,则返回原始二进制数据;若为 false,则返回十六进制字符串。

示例代码

以下是一个生成 HMAC-SHA256 的示例:

$data = "Hello, world!";
$key = "secret_key";
$hmac = hash_hmac('sha256', $data, $key);
echo $hmac;

输出为一个十六进制字符串,例如:

a8b4a9e1c7f1d5b5f1c7f1d5b5f1c7f1d5b5f1c7f1d5b5f1c7f1d5b5f1c7

生成二进制 HMAC

如果需要二进制格式的 HMAC,可以将 $binary 参数设为 true

$hmac_binary = hash_hmac('sha256', $data, $key, true);
echo bin2hex($hmac_binary); // 转换为十六进制显示

支持的哈希算法

可以通过 hash_hmac_algos() 函数查看 PHP 支持的 HMAC 哈希算法列表:

$algorithms = hash_hmac_algos();
print_r($algorithms);

输出类似:

Array
(
    [0] => md5
    [1] => sha1
    [2] => sha256
    ...
)

验证 HMAC

验证 HMAC 时,重新计算数据的 HMAC 并与原始 HMAC 比较:

$received_hmac = "a8b4a9e1c7f1d5b5f1c7f1d5b5f1c7f1d5b5f1c7f1d5b5f1c7f1d5b5f1c7";
$calculated_hmac = hash_hmac('sha256', $data, $key);

if (hash_equals($calculated_hmac, $received_hmac)) {
    echo "HMAC verification passed.";
} else {
    echo "HMAC verification failed.";
}

注意:使用 hash_equals() 函数可以防止时序攻击(timing attack)。

php实现hmac

标签: phphmac
分享给朋友:

相关文章

php实现文件下载

php实现文件下载

PHP 实现文件下载的方法 使用 header() 函数强制下载 设置正确的 HTTP 头信息,强制浏览器下载文件而不是直接打开。 $file = 'path/to/file.pdf'; if (…

php实现购物车

php实现购物车

PHP实现购物车功能 购物车功能是电商网站的核心模块之一,通常涉及商品添加、删除、数量修改和结算等操作。以下是使用PHP实现购物车功能的几种方法。 使用Session存储购物车数据 Session是…

php实现搜索功能

php实现搜索功能

实现基本的搜索功能 在PHP中实现搜索功能通常涉及数据库查询。以下是一个简单的实现方式,假设使用MySQL数据库: <?php // 连接数据库 $conn = new mysqli('loc…

php 实现自动收货

php 实现自动收货

PHP 实现自动收货功能 自动收货功能通常用于电商系统,在订单超过一定时间未手动确认收货时自动完成订单。以下是实现方法: 数据库设计 需要订单表包含以下关键字段: CREATE TABLE…

php实现增删改查

php实现增删改查

以下是在PHP中实现增删改查(CRUD)操作的详细方法,以MySQL数据库为例: 数据库连接配置 创建config.php文件存储数据库连接信息: <?php $host = 'loca…

php实现定时任务

php实现定时任务

PHP 实现定时任务的几种方法 在 PHP 中实现定时任务可以通过多种方式完成,具体选择取决于项目需求和服务器环境。以下是常见的实现方法: 使用 Cron 任务 Cron 是 Linux 系统中常…