当前位置:首页 > 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 的示例:

php实现hmac

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

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

a8b4a9e1c7f1d5b5f1c7f1d5b5f1c7f1d5b5f1c7f1d5b5f1c7f1d5b5f1c7

生成二进制 HMAC

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

php实现hmac

$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)。

标签: phphmac
分享给朋友:

相关文章

php实现分页

php实现分页

PHP实现分页的基本方法 使用LIMIT和OFFSET进行数据库查询分页。通过计算当前页码和每页显示数量,动态生成SQL语句。 $page = isset($_GET['page']) ? (int…

php记住密码怎么实现

php记住密码怎么实现

使用Cookie实现记住密码功能 在PHP中,可以通过设置Cookie来记住用户的登录状态。以下是一个简单的实现方式: // 用户登录验证成功后 if ($login_success) {…

php 购物车实现

php 购物车实现

数据库设计 购物车功能通常需要设计数据库表存储商品和用户信息。常见的表包括products(商品表)、users(用户表)和cart(购物车表)。cart表通常包含字段:id(主键)、user_id(…

php实现静态

php实现静态

静态化实现方法 PHP实现静态化主要通过生成HTML文件或缓存机制来减少服务器动态解析的开销。以下是几种常见方法: 生成静态HTML文件 通过file_put_contents()将动态内容保存为H…

php无限分类的实现

php无限分类的实现

PHP无限分类的实现 无限分类是一种常见的树形结构数据组织方式,适用于商品分类、菜单管理、地区选择等场景。以下是几种实现方法: 递归实现法 递归是最直观的实现方式,通过函数自身调用来遍历子分类。数据…

php https实现

php https实现

PHP 中实现 HTTPS 的方法 在 PHP 中实现 HTTPS 主要通过配置服务器和编写代码来确保通信的安全性。以下是几种常见的方法: 配置服务器支持 HTTPS 确保服务器已安装 SSL/T…