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

下面我将详细讲解如何使用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读取mat文件,并转为csv文件的实例

    下面是关于“Python读取mat文件,并转为csv文件的实例”的完整攻略。 一、准备工作 在使用Python读取.mat文件前,需要先安装SciPy和NumPy两个库。可以在命令行中使用以下命令进行安装: pip install numpy pip install scipy 二、加载.mat文件 接下来,我们需要使用SciPy中的loadmat方法加载.…

    python 2023年6月2日
    00
  • 少见的C# RSA算法

    RSA算法是一种公钥加密、数字签名、密钥交换协议算法, 其中公钥与私钥是配对的,即使用公钥加密的数据只能使用相应的私钥才能解密。在C#中,可以通过System.Security.Cryptography命名空间中的RSACryptoServiceProvider类使用RSA算法。 生成RSA密钥对 生成RSA密钥对需要调用RSACryptoServicePr…

    python 2023年6月3日
    00
  • python基础之循环语句

    Python是一种高级编程语言,内置了很多流行的循环语句,可以用来控制程序的流程和执行次数。在Python中,循环语句分为两种:for循环和while循环,分别适用于不同的场景。 for循环 for循环是Python最常用的循环语句之一,通常用于遍历序列和迭代器,执行一定数量的次数。for循环的语法格式如下: for 变量 in 序列: 循环体语句 其中,变…

    python 2023年5月31日
    00
  • Python编程实现生成特定范围内不重复多个随机数的2种方法

    Python编程实现生成特定范围内不重复多个随机数的2种方法 在Python中,实现生成特定范围内不重复多个随机数的方法有很多,本篇文章将重点介绍2种方法。 方法一:使用random.sample函数 random.sample函数是Python标准库random中的一个函数,可以快速生成特定范围内不重复的随机数。 以下是使用random.sample函数生…

    python 2023年6月3日
    00
  • python+opencv实现移动侦测(帧差法)

    下面是详细讲解“Python+OpenCV实现移动侦测(帧差法)”的完整攻略。 1. 什么是移动侦测 移动侦测是指通过对视频或图像序列进行分析,检测出其中的运动目标。在视频监控、智能交通等领域中,移动侦测是一项重要的技术。 2. 帧差法原理 帧差法是一种简单有效的移动侦测算法,其原理是通过比较相邻帧之间的像素值差异,来检测出运动目标。具体实现过程如下: 读取…

    python 2023年5月14日
    00
  • 深入解析Python中的多进程

    深入解析Python中的多进程攻略 什么是多进程 多进程指的是同时运行多个进程,每个进程都拥有独立的系统资源。相比于单进程,多进程可以大大提高程序的执行效率,尤其是在并发处理大量数据时表现更为出色。在 Python 中,我们可以通过 multiprocessing 模块来实现多进程的功能。该模块提供了一系列的工具函数和类,让编写多进程应用变得更加简单和方便。…

    python 2023年5月19日
    00
  • python中flatten()函数用法详解

    当然,我很乐意为您提供“Python中flatten()函数用法详解”的完整攻略。以下是详细的步骤和示例: flatten()函数 在Python中,flatten函数用于将嵌套的列表元组展开为一维列表。flatten()函数可以递归地展开嵌套的列表或元组,直到嵌套的列表或元组都被开为一维列表。 语法 flatten(lst, ltypes=(list, t…

    python 2023年5月13日
    00
  • python BeautifulSoup设置页面编码的方法

    Python BeautifulSoup设置页面编码的方法 在使用Python和BeautifulSoup库解析网页时,有时会遇到编码问题。如果网页的编码与Python默认编码不同,那么我们需要设置页面编码,以确保正确解析网页。在本文中,我们将介绍如何使用Python和BeautifulSoup库设置页面编码。我们将提供两个示例,演示如何设置UTF-8编码和…

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