当前位置:首页 > PHP

php实现hmac

2026-02-15 01:55:13PHP

PHP 实现 HMAC

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

基本语法

hash_hmac 函数的语法如下:

string hash_hmac(string $algo, string $data, string $key, bool $binary = false)
  • $algo:哈希算法名称,如 sha256md5 等。
  • $data:需要计算 HMAC 的消息数据。
  • $key:用于生成 HMAC 的密钥。
  • $binary:如果为 true,返回原始二进制数据;否则返回十六进制字符串(默认)。

示例代码

以下是使用 sha256 算法生成 HMAC 的示例:

$data = "This is the message to authenticate";
$key = "secret_key";
$hmac = hash_hmac('sha256', $data, $key);
echo $hmac;

支持的哈希算法

可以通过 hash_hmac_algos() 函数获取 PHP 支持的 HMAC 算法列表:

print_r(hash_hmac_algos());

输出二进制数据

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

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

验证 HMAC

验证 HMAC 时,只需重新生成 HMAC 并与接收到的 HMAC 进行比较:

php实现hmac

$received_hmac = "received_hmac_hex_string";
$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() 函数比较 HMAC 可以避免时序攻击。
  • 密钥应足够复杂且保密,避免使用简单或公开的密钥。
  • 推荐使用强哈希算法(如 sha256sha3-256),避免弱算法(如 md5)。

标签: phphmac
分享给朋友:

相关文章

php实现增删改查

php实现增删改查

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

php实现异步

php实现异步

PHP 实现异步的方法 PHP 本身是同步执行的脚本语言,但可以通过以下方法模拟异步操作或实现异步效果: 使用多进程(pcntl_fork) 通过 pcntl_fork 创建子进程实现异步,适用于…

php实现的分页

php实现的分页

PHP 实现分页的方法 基本分页逻辑 分页的核心在于计算总页数、当前页码以及数据偏移量。假设每页显示 10 条数据: $current_page = isset($_GET['page']) ? (…

php无限分类的实现

php无限分类的实现

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

php怎么实现登录功能

php怎么实现登录功能

数据库准备 创建用户表存储登录信息,通常包括用户名、密码(需加密)等字段。示例SQL: CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY…

php 实现秒杀

php 实现秒杀

PHP 实现秒杀的关键技术 秒杀系统需要解决高并发、超卖、性能瓶颈等问题。以下是实现秒杀的核心方案: 使用 Redis 预减库存 将商品库存提前加载到 Redis 中,通过原子操作保证库存准确性:…