hmac模块生成加入了密钥的消息摘要详解

yizhihongxing

下面我将详细讲解如何使用hmac模块生成加入了密钥的消息摘要。

什么是HMAC?

HMAC是一种通过散列算法构造的消息认证码。它是一种基于密钥的哈希算法,可以用于验证消息的完整性,同时也可以用于身份认证。

HMAC的算法流程

生成HMAC需要先准备一个密钥和一条消息。下面是HMAC的算法流程:

  1. 如果密钥的长度比HASH函数的块长要长,则使用HASH函数对密钥进行 Hash 计算。
  2. 如果密钥的长度不足 HASH 函数的块长,则使用填充方法对密钥填充到块长长度。
  3. Exclusive-or 填充后的密钥和 ipad值。
  4. 把填充后的密钥和要计算的消息按数据块长度进行分组,对每一块的数据进行 Exclusive-or 构建出加密过的消息。
  5. Exclusive-or 填充后的密钥和 opad值。
  6. 把第4步中生成的加密过的消息和 ipad-subkey一起使用哈希函数HASH进行计算,得到 H1。
  7. 把第5步中生成的加密过的消息和 opad-subkey一起使用哈希函数HASH进行计算,得到 H2。
  8. 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技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • 深入浅析Python 中的sklearn模型选择

    深入浅析Python 中的sklearn模型选择 本文将针对Python中的scikit-learn (简称 sklearn),深入浅出的介绍模型选择的相关知识。 什么是模型选择 在机器学习中,模型选取是一个非常重要的工作。机器学习算法存在许多参数需要调整,而这些参数的不同取值会对最终的模型性能产生非常大的影响。模型选择的目的是在不同的模型或不同的参数集上进…

    python 2023年6月2日
    00
  • 16异常处理

    异常处理 异常 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。 一般情况下,在Python无法正常处理程序时就会发生一个异常。 异常是Python对象,表示一个错误。 当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。 捕获异常 异常类型捕获 # 捕获常规异常 try: 可能发生错误的代码 except: 如果出行异…

    python 2023年4月27日
    00
  • 16行Python代码实现微信聊天机器人并自动智能回复功能

    我们先来看一下实现微信聊天机器人并自动智能回复的大致思路: 使用itchat库登录微信账号获取itchat对象; 编写消息回复的函数; 监听用户发送的消息,并调用消息回复函数进行回复。 接下来按照这个思路来详细讲解“16行Python代码实现微信聊天机器人并自动智能回复功能”的完整攻略。 步骤1:使用itchat库登录微信账号获取itchat对象 首先,需要…

    python 2023年5月19日
    00
  • 图文详解梯度下降算法的原理及Python实现

    图文详解梯度下降算法的原理及Python实现 梯度下降算法是机器学习中最常用的优化算法之一,它的主要作用是通过迭代的方式,不断调整模型参数使得模型的损失函数最小化。本文将详细讲解梯度下降算法的原理及Python实现,以及两个示例说明。 梯度下降算法原理 梯度下降算法的基本思想是通过不断调整模型参数,使得模型的损失函数最小化。具体来说,算法的步骤如下: 随机初…

    python 2023年5月14日
    00
  • Python输入二维数组方法

    下面是详细讲解“Python输入二维数组方法”的完整攻略: 方法一:使用嵌套列表 我们可以使用嵌套列表的方式,将二维数组的每一行都表示为一个列表元素,然后将所有这样的行列表组成一个大的列表。以下是具体的步骤: 定义一个空列表,用于存储所有的行列表。 使用一个 for 循环,遍历输入的所有行。 在每次遍历中,创建一个空列表,用于保存当前行的所有元素。 使用另一…

    python 2023年6月5日
    00
  • python游戏测试工具自动化遍历游戏中所有关卡

    要实现Python游戏测试工具自动化遍历游戏中所有关卡,可以按照以下步骤进行: 步骤1:选用合适的自动化测试工具 从众多的自动化测试工具中,比较适合用于Python游戏测试的工具有PyAutoGUI和Selenium等。选择工具时需审慎考虑,根据具体的需求选用。 使用PyAutoGUI:可通过模拟鼠标和键盘操作,实现游戏中所有操作的自动化。 使用Seleni…

    python 2023年5月19日
    00
  • Python实现的数据结构与算法之快速排序详解

    下面是关于“Python实现的数据结构与算法之快速排序详解”的完整攻略。 1. 快速排序算法概述 快速排序是一种高效的排序算法,它的基本思想是通过分治的想将一个大问题解成多个小问题,后递归地解决这些小问题。快速排序的复杂度为O(nlogn),是一种非高的排序算法。 2 快速排序算法实现 下面使用Python实现快速排序的代码: def quick_sort(…

    python 2023年5月13日
    00
  • python3.5的包存放的具体路径

    Python3.5的包存放的具体路径一般是/usr/local/lib/python3.5/site-packages,不过在不同的系统或环境下可能会有所不同,以下是获取路径的一些方法。 方法一:使用python解释器自带的方法 可以在Python解释器中使用site包获取包存放路径,具体步骤如下: 打开终端或命令行界面; 执行以下命令: python py…

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部