相当于 oppenssl_* 函数中的 hash_hmac
Equivalent to hash_hmac in oppenssl_* functions
什么等价于:
hash_hmac('sha256', 'data', 'key')
如果我使用的是 openssl_*?
openssl_digest 不接受 $key 参数。
此函数使用 openssl_* 扩展来散列数据和密钥:
代码
function openssl_hmac($algo, $data, $key, $raw_output = false)
{
$algo = strtolower($algo);
$pack = 'H' . strlen(openssl_digest('test', $algo));
$size = 64;
$opad = str_repeat(chr(0x5C), $size);
$ipad = str_repeat(chr(0x36), $size);
if (strlen($key) > $size) {
$key = str_pad(pack($pack, $algo($key)), $size, chr(0x00));
} else {
$key = str_pad($key, $size, chr(0x00));
}
for ($i = 0; $i < strlen($key) - 1; $i++) {
$opad[$i] = $opad[$i] ^ $key[$i];
$ipad[$i] = $ipad[$i] ^ $key[$i];
}
$output = openssl_digest($opad . pack($pack, openssl_digest($ipad . $data, $algo)), $algo);
return ($raw_output) ? pack($pack, $output) : $output;
}
用法
echo openssl_hmac('sha256', 'data', 'key', false);
结果:
5031fe3d989c6d1537a013fa6e739da23463fdaec3b70137d828e36ace221bd0
结果与使用hash_hmac
函数时相同:
echo hash_hmac('sha256', 'data', 'key');
结果:
5031fe3d989c6d1537a013fa6e739da23463fdaec3b70137d828e36ace221bd0
什么等价于:
hash_hmac('sha256', 'data', 'key')
如果我使用的是 openssl_*?
openssl_digest 不接受 $key 参数。
此函数使用 openssl_* 扩展来散列数据和密钥:
代码
function openssl_hmac($algo, $data, $key, $raw_output = false)
{
$algo = strtolower($algo);
$pack = 'H' . strlen(openssl_digest('test', $algo));
$size = 64;
$opad = str_repeat(chr(0x5C), $size);
$ipad = str_repeat(chr(0x36), $size);
if (strlen($key) > $size) {
$key = str_pad(pack($pack, $algo($key)), $size, chr(0x00));
} else {
$key = str_pad($key, $size, chr(0x00));
}
for ($i = 0; $i < strlen($key) - 1; $i++) {
$opad[$i] = $opad[$i] ^ $key[$i];
$ipad[$i] = $ipad[$i] ^ $key[$i];
}
$output = openssl_digest($opad . pack($pack, openssl_digest($ipad . $data, $algo)), $algo);
return ($raw_output) ? pack($pack, $output) : $output;
}
用法
echo openssl_hmac('sha256', 'data', 'key', false);
结果:
5031fe3d989c6d1537a013fa6e739da23463fdaec3b70137d828e36ace221bd0
结果与使用hash_hmac
函数时相同:
echo hash_hmac('sha256', 'data', 'key');
结果:
5031fe3d989c6d1537a013fa6e739da23463fdaec3b70137d828e36ace221bd0