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







