当前位置:首页 > 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 比较:

php实现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)。

标签: phphmac
分享给朋友:

相关文章

php实现栈

php实现栈

栈的基本概念 栈(Stack)是一种遵循后进先出(LIFO)原则的数据结构。核心操作包括: push:元素入栈。 pop:元素出栈(返回并移除栈顶元素)。 peek:查看栈顶元素(不移除…

php实现mysql

php实现mysql

PHP 连接 MySQL 的基本方法 PHP 提供了多种方式与 MySQL 数据库进行交互,以下是最常用的几种方法。 使用 MySQLi 扩展 MySQLi 是 MySQL 的改进扩展,支持面向对…

php实现聊天

php实现聊天

实现 PHP 聊天功能的方法 使用 WebSocket 和 PHP 实现实时聊天 WebSocket 是一种全双工通信协议,适合实现实时聊天功能。PHP 可以通过 Ratchet 库实现 WebSo…

php实现分类

php实现分类

PHP实现分类的方法 数据库设计 创建分类表时,通常需要包含id、名称、父级id等字段。父级id用于实现多级分类结构。 CREATE TABLE categories ( id INT AU…

php 无限分类的实现

php 无限分类的实现

无限分类的实现方法 无限分类通常用于构建树形结构数据,如商品分类、多级菜单等。以下是几种常见的实现方式: 邻接列表模型(Adjacency List) 邻接列表是最简单的实现方式,通过在每个节点中存…

php实现过程

php实现过程

PHP 实现过程 PHP 是一种广泛使用的服务器端脚本语言,特别适合 Web 开发。以下是 PHP 实现过程的关键步骤和注意事项。 安装与配置 下载并安装 PHP,可以从官方 PHP 网站获取最新版…