今天我们来聊一下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加密技术非常适合在网络传输、交互等场景下,用于保护消息的完整性和安全,可以为应用程序提供更多的安全保障。