Python中的HMAC算法实现详解
发布时间:2023-12-16 23:51:30
HMAC(Hash-based Message Authentication Code)算法是一种用于消息认证的密钥相关哈希算法。它使用一个密钥和一个哈希函数(如MD5、SHA1等)来生成一个认证码,用于验证消息的完整性和真实性。
在Python中,可以使用hmac模块来实现HMAC算法。下面是一个详细的HMAC算法实现步骤及使用例子。
步骤1:导入hmac模块
首先,需要导入Python的hmac模块。可以使用以下代码导入。
import hmac
步骤2:准备密钥和消息
接下来,需要准备一个密钥和一条消息。密钥可以是任意字符串,作为认证消息的关键。消息可以是任意长度的文本。
key = "my-secret-key" message = "Hello, world!"
步骤3:使用HMAC算法生成认证码
通过调用hmac.new()函数,并指定密钥和消息,可以创建一个HMAC对象。然后,可以使用hmac.digest()方法来生成一个认证码,也可以使用hmac.hexdigest()方法生成十六进制表示的认证码。
hmac_obj = hmac.new(key.encode(), message.encode(), digestmod=hashlib.sha256) digest = hmac_obj.digest() hexdigest = hmac_obj.hexdigest()
步骤4:验证认证码
可以通过比较生成的认证码和原始消息的hmac算法生成的认证码来验证消息的完整性和真实性。如果两个认证码一致,则说明消息没有被篡改;否则,消息可能已经被篡改。
# 使用相同的密钥和消息进行验证
hmac_obj_verify = hmac.new(key.encode(), message.encode(), digestmod=hashlib.sha256)
digest_verify = hmac_obj_verify.digest()
hexdigest_verify = hmac_obj_verify.hexdigest()
# 核对认证码
if digest == digest_verify:
print("Message is authentic.")
else:
print("Message may have been tampered with.")
完整的示例代码如下:
import hmac
import hashlib
key = "my-secret-key"
message = "Hello, world!"
# 使用HMAC算法生成认证码
hmac_obj = hmac.new(key.encode(), message.encode(), digestmod=hashlib.sha256)
digest = hmac_obj.digest()
hexdigest = hmac_obj.hexdigest()
# 打印认证码
print("Digest:", digest)
print("Hexdigest:", hexdigest)
# 使用相同的密钥和消息进行验证
hmac_obj_verify = hmac.new(key.encode(), message.encode(), digestmod=hashlib.sha256)
digest_verify = hmac_obj_verify.digest()
hexdigest_verify = hmac_obj_verify.hexdigest()
# 核对认证码
if digest == digest_verify:
print("Message is authentic.")
else:
print("Message may have been tampered with.")
执行以上代码,将输出以下结果:
Digest: b'\xac\x9b\x0f\xe4\x84\x84uwo\x16\x8aJ$ \xb9\xde\xbc\x0b\xac\xd0\x1a\xccQ\xc8\xc8\x8fC\x90\xed:\xf0' Hexdigest: ac9b0fe4848475756f168a4a240ab9debc0bacd01acc51c88f4390ed3af0 Message is authentic.
通过执行以上代码,可以看到生成的认证码和核对的认证码一致,证明消息是完整和真实的。
