在Python中,HMAC(Hash-based Message Authentication Code)是一种用于消息认证的密码学函数。HMAC结合了哈希函数和密钥,用于验证消息的完整性和身份。
Python标准库中的hmac模块提供了HMAC函数的实现。下面是一个示例代码,演示了如何在Python中使用HMAC:
from hashlib import sha256
import hmac
import time
def get_sign(key,message):
message = message.encode("utf-8")#字符串转bytes:字节
key_s = key.encode("utf-8")
#使用SHA-256哈希算法计算HMAC
siT2=hmac.new(key_s,message,digestmod=sha256).digest()#hash.digest() 返回摘要,作为二进制数据字符串值
return siT2.hex()#返回HMAC的十六进制表示
if __name__=='__main__':
timestramp=str(round(time.time()*1000))
key="000000"
message="123456" + timestramp #签名数据加上当前时间戳
print(get_sign(key,message))
执行代码结果:6038b9f22aaec49ddc91532cd366876ddcab7d954cf88039693a9c844b0f77f7
代码解释原理:
1、密钥选择:首先,选择一个密钥(key)作为HMAC的输入。密钥是一个随机生成的字节序列,应该保持机密和安全。
2、消息准备:将要计算HMAC的消息(message)以字节形式表示。消息可以是任意长度的数据,例如文本字符串或二进制数据。
3、哈希算法选择:选择一个哈希算法,例如SHA-256(Secure Hash Algorithm 256-bit)。在示例中,我们使用hashlib.sha256表示SHA-256哈希算法。
4、HMAC计算:使用hmac.new(key, message, hashlib.sha256)函数计算HMAC。该函数接受三个参数:密钥、消息和哈希算法。它将密钥和消息作为输入,并在内部使用选择的哈希算法对它们进行处理。
5、HMAC值获取:通过调用.digest()方法获取计算得到的HMAC值。HMAC值是一个字节序列,代表了消息的认证码。
6、HMAC表示:通过.hex()方法将HMAC值转换为十六进制表示,以便进行打印或其他操作。
HMAC的安全性依赖于密钥的保密性。由于HMAC使用了密钥来计算认证码,只有知道正确密钥的人才能验证消息的完整性和身份。任何未授权的修改消息或未知的密钥都会导致HMAC值的不匹配。
因此,HMAC提供了一种有效的方式来验证消息的完整性和身份,防止消息被篡改或伪装。它在网络通信、数字签名、认证协议等领域广泛应用。