php实现hmac
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:哈希算法名称,如sha256、md5等。$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 进行比较:
$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 可以避免时序攻击。 - 密钥应足够复杂且保密,避免使用简单或公开的密钥。
- 推荐使用强哈希算法(如
sha256或sha3-256),避免弱算法(如md5)。







