当先锋百科网

首页 1 2 3 4 5 6 7

今天我们来聊一下PHP中常用的哈希(HASH)加密技术之一- HMAC。HMAC是从一般哈希算法发展而来的,关于hash加密的用途和作用已经被广泛的介绍过,这里就不再赘述。

在PHP中,使用HMAC加密,需要使用hash_hmac($algorithm, $data, $key, $raw_output)函数。其中:

$algorithm: 哈希算法,如SHA256等;
$data:待加密的数据;
$key:加密密钥;
$raw_output:输出格式,true表示二进制格式,false表示十六进制格式(默认false)。

下面我们结合实例来介绍HMAC加密:

$key = "This is a key";
$data = "This is some data";
$hash = hash_hmac("sha256", $data, $key);
echo "加密后的值:" . $hash;

上面的代码将待加密数据$data使用SHA256哈希算法和密钥$key进行加密,得到的结果为:

c4e68efdebb90aba452ecb0f8c635763cd74de1d8631f69f473586c78b55db4e

HMAC加密的一个重要应用场景就是用于防止消息篡改。

例如:在网络传输过程中,可能会有恶意第三方干扰,篡改传输的消息内容,从而达到非法盗取、篡改信息的目的。如果没有措施对付这种攻击,将会造成不可估量的损失。

在此场景下,HMAC就是一个解决方案。使用HMAC+加密密钥,进行消息内容的加密和基于密钥的认证,确保消息未被篡改。下面我们看一个例子:

$data = "This is some data";
$key = "This is a key";
$hash = hash_hmac("sha256", $data, $key);
$message = $data . "|" . $hash;
// 将消息数据$message发送到对方
// 对方收到数据后,进行消息内容和认证码校验:
$arr = explode("|", $message);
$messageData = $arr[0]; // 内容
$messageHash = $arr[1]; // 认证码
// 重新计算认证码
$newHash = hash_hmac("sha256", $messageData, $key);
// 比对认证码
if($newHash == $messageHash) {
echo "消息无篡改";
} else {
echo "消息已被篡改,请注意安全!";
}

上面的代码用$|分隔了消息和HMAC,对方在接收消息后,重新计算得到HMAC,和接收到的HMAC对比来判断消息是否被篡改。

由此可见,HMAC加密技术非常适合在网络传输、交互等场景下,用于保护消息的完整性和安全,可以为应用程序提供更多的安全保障。