Python中利用Crypto库的HMAC函数进行数据完整性校验的方法
发布时间:2024-01-10 14:37:38
在Python中,可以使用Crypto库中的HMAC函数来进行数据完整性校验。HMAC(Hash-based Message Authentication Code)是一种基于散列函数的消息认证码,它通过加入一个密钥来保证消息的完整性和真实性。
首先,需要通过以下命令安装Crypto库:
pip install pycryptodome
然后,可以使用下面的代码来进行数据完整性校验的示例:
from Crypto.Hash import HMAC, SHA256
# 密钥,用于HMAC计算
key = b'my_secret_key'
# 要校验的数据
data = b'This is the original data'
# 创建HMAC对象,使用SHA256散列函数和密钥
hmac = HMAC.new(key, digestmod=SHA256)
# 更新HMAC对象的内部状态,传入要校验的数据
hmac.update(data)
# 计算HMAC值
hmac_result = hmac.digest()
# 将HMAC值转换为十六进制字符串
hmac_hex = hmac_result.hex()
print("HMAC值:", hmac_hex)
# 假设接收方收到数据和HMAC值
received_data = b'This is the original data'
received_hmac_hex = hmac_hex
# 创建新的HMAC对象,使用相同的密钥和散列函数
hmac_check = HMAC.new(key, digestmod=SHA256)
# 更新HMAC对象的内部状态,传入接收到的数据
hmac_check.update(received_data)
# 计算接收到的数据的HMAC值
received_hmac_result = hmac_check.digest()
# 将接收到的HMAC值转换为十六进制字符串
received_hmac_hex = received_hmac_result.hex()
# 比较计算出的HMAC值和接收到的HMAC值
if hmac_hex == received_hmac_hex:
print("数据完整性校验通过")
else:
print("数据完整性校验失败")
在上述示例中,首先创建了一个HMAC对象,并使用new()函数提供的密钥和散列函数来初始化。然后,使用update()函数传入要校验的数据来更新HMAC对象的内部状态。接下来,通过digest()函数计算HMAC值,并通过hex()函数将其转换为十六进制字符串。
在接收方,创建一个新的HMAC对象,并使用相同的密钥和散列函数初始化。然后,使用update()函数传入接收到的数据来更新HMAC对象的内部状态。通过digest()函数计算接收到的数据的HMAC值,并通过hex()函数将其转换为十六进制字符串。最后,比较计算出的HMAC值和接收到的HMAC值,以判断数据的完整性是否通过校验。
需要注意的是,HMAC使用的密钥在发送方和接收方之间必须是相同的,否则校验会失败。
