欢迎访问宙启技术站
智能推送

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使用的密钥在发送方和接收方之间必须是相同的,否则校验会失败。