下面我将详细讲解如何使用hmac模块生成加入了密钥的消息摘要。
什么是HMAC?
HMAC是一种通过散列算法构造的消息认证码。它是一种基于密钥的哈希算法,可以用于验证消息的完整性,同时也可以用于身份认证。
HMAC的算法流程
生成HMAC需要先准备一个密钥和一条消息。下面是HMAC的算法流程:
- 如果密钥的长度比HASH函数的块长要长,则使用HASH函数对密钥进行 Hash 计算。
- 如果密钥的长度不足 HASH 函数的块长,则使用填充方法对密钥填充到块长长度。
- Exclusive-or 填充后的密钥和 ipad值。
- 把填充后的密钥和要计算的消息按数据块长度进行分组,对每一块的数据进行 Exclusive-or 构建出加密过的消息。
- Exclusive-or 填充后的密钥和 opad值。
- 把第4步中生成的加密过的消息和 ipad-subkey一起使用哈希函数HASH进行计算,得到 H1。
- 把第5步中生成的加密过的消息和 opad-subkey一起使用哈希函数HASH进行计算,得到 H2。
- H1 与 H2 拼接得到 HMAC 的值。
hmac模块生成消息摘要的实例
import hmac
import hashlib
# 存储在服务器中的密钥
secret_key = 'bdef12d9492195502cd36a4483dce1fd'
# 要计算的消息
message = 'hello, world!'
# 首先将密钥进行哈希
hashed_secret_key = hashlib.sha256(secret_key.encode()).digest()
# 使用哈希后的密钥和要计算的消息生成HMAC
hmac_value = hmac.new(hashed_secret_key, message.encode(), hashlib.sha256).digest()
# 打印生成的HMAC值
print(hmac_value.hex())
上面的代码中,我们使用了Python的hmac模块和hashlib模块,首先对密钥进行哈希,然后使用哈希后的密钥和要计算的消息生成HMAC值。生成的HMAC值是一个字节串,可以使用hex()方法将其转换为十六进制字符串。
另外,还可以使用HMAC处理文件。例如,我们可以计算一个文件的HMAC值,如下所示:
import hmac
import hashlib
# 存储在服务器中的密钥
secret_key = 'bdef12d9492195502cd36a4483dce1fd'
# 要计算的文件
with open('myfile.txt', 'rb') as f:
file_content = f.read()
# 首先将密钥进行哈希
hashed_secret_key = hashlib.sha256(secret_key.encode()).digest()
# 使用哈希后的密钥和文件内容生成HMAC
hmac_value = hmac.new(hashed_secret_key, file_content, hashlib.sha256).digest()
# 打印生成的HMAC值
print(hmac_value.hex())
上面的代码中,我们使用了with语句打开文件,并将文件内容读取到file_content变量中。然后,我们使用哈希后的密钥和文件内容生成HMAC值。注意,在这个例子中,我们没有对消息进行编码,因为文件是以二进制格式打开的。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:hmac模块生成加入了密钥的消息摘要详解 - Python技术站