安全矩阵

 找回密码
 立即注册
搜索
查看: 4576|回复: 0

PHP安全:MAC和HMAC

[复制链接]

991

主题

1063

帖子

4315

积分

论坛元老

Rank: 8Rank: 8

积分
4315
发表于 2020-10-3 09:07:44 | 显示全部楼层 |阅读模式
原文链接:PHP安全:MAC和HMAC

消息认证码(Message Authentication Code,MAC)在发送消息的基础上通过Key生成加密摘要,通常被用于检测消息在传输过程中是否被篡改。MAC消息认证过程如图1所示。


图1  MAC消息认证过程

在图1所示的消息认证过程中,消息的发送方通过密钥和MAC算法生成MAC数据标记,然后将消息和MAC标签发送到接收方。消息接收方依次使用相同的密钥通过相同的MAC算法运行传输的消息部分,产生MAC数据标签。接收器将在传输中接收的MAC标签与自己生成的MAC标签进行比较。如果它们相同,则接收方可以认为消息在传输期间未发生改变或篡改。

同时,为了防止重放攻击,消息本身必须包含确保该相同消息仅能被发送一次的数据,例如使用时间戳、序列号或使用一次MAC。

散列消息身份验证码(Hashed Message Authentication Code,HMAC)是在MAC算法基础上基于加密散列算法实现的。

在下面的PHP代码中使用hash_hmac()函数来使用MD5方式给原始消息生成散列值。

<?php
echo hash_hmac('md5','PHP核心安全高级指南','php_secret_key');
// 执行结果为:218c92193edf5048ff08217db2709db2
?>

如果需要给文件生成散列值,可使用hash_hmac_file()函数,在下面的示例代码中使用SHA256算法生成散列值。

<?php
echo hash_hmac('sha256','/tmp/PHP核心安全高级指南.pdf','php_secret_key');
// 执行结果为:2fa57221aac5683c58f4eaae16e35b5da9eaddab57c6bb539d4384c2dfccd0b8
?>

如果要知道hash_hmac()支持哪些散列算法,可以通过执行hash_hmac_algos()或hash_algos()函数来获取hash_hmac()通常支持的散列算法,如表1所示。

表1  hash_hmac()支持的散列算法


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-28 07:37 , Processed in 0.012574 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表