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日

相关文章

  • python3 requests中文乱码之压缩格式问题解析

    Python3 requests中文乱码之压缩格式问题解析 在使用Python3的requests库发送HTTP请求时,我们可能会遇到中文乱码的问题。这个问题通常是由于压缩格式不正确导致的。本文将介绍如何解决Python3 requests中文乱码问题,并提供两个示例。 问题分析 在使用requests库发送HTTP请求时,我们可以使用headers参数指定…

    python 2023年5月15日
    00
  • 如何将PySpark导入Python的放实现(2种)

    将PySpark导入到Python程序中可以使用两种方法:使用PySpark包和使用findSpark包。 方法一:使用PySpark包 安装PySpark PySpark是Apache Spark为Python API提供的包,我们可以通过pip安装。在命令行中输入以下命令: pip install pyspark 在Python脚本中导入PySpark包…

    python 2023年6月6日
    00
  • Pycharm-community-2020.2.3 社区版安装教程图文详解

    下面我来详细讲解“Pycharm-community-2020.2.3 社区版安装教程图文详解”的完整攻略。 1. 下载安装包 首先在官网(https://www.jetbrains.com/pycharm/download/)下载 PyCharm 社区版的安装包。选择相应的操作系统版本下载,下载完成后解压。 2. 安装 PyCharm 双击解压后的安装包,…

    python 2023年6月5日
    00
  • python re模块和正则表达式

    Python re模块和正则表达式 正则表达式是一种强大的工具,可以用于匹配、查找和替换文本中的模式。Python中re模块供了正则表达式的支持,本攻略将详细讲解Python中的re模块和正则表达式的基本用法、常用符号和示例应用。 基本用法 Python中使用re模块提供的函数来操作正则表达式。模块提供了常用函数: re.search(pattern, st…

    python 2023年5月14日
    00
  • Python实现批量识别图片文字并存为Excel

    以下是 Python 实现批量识别图片文字并存为 Excel 的完整攻略。 1. 前置条件 在开始本攻略之前,请确保您已经安装了以下环境和库: Python 3.x Tesseract OCR 引擎 Pillow 库 Pytesseract 库 OpenCV 库 Pandas 库 2. 构建识别图片的 Python 环境 安装 Tesseract OCR 引…

    python 2023年6月5日
    00
  • python2 与python3的print区别小结

    下面是“Python 2与Python 3的print区别小结”的详细攻略: 标准输出 在Python 2中,print语句被用于把文本输出到控制台: print ‘Hello, world!’ 在Python 3中,print变成了一个函数,需要用括号包含文本来输出: print(‘Hello, world!’) 打印变量 在Python 2中,可以简单地…

    python 2023年6月5日
    00
  • python实现kmp算法的实例代码

    Python实现KMP算法详解 KMP算法是一种字符串匹配算法,它的核心思想是利用已知信息避免无效的比较,从而提高匹配效率。在Python中,可以使用简单的代码实现KMP算法。本文将详细讲解Python实现KMP算法的过程,并提供两个示例说明。 KMP算法原理 KMP算法的基本原理是利用已知信息避免无效的比较,从而提高匹配效率。具体过程如下: 预处理模式串,…

    python 2023年5月13日
    00
  • python uuid生成唯一id或str的最简单案例

    生成唯一标识符(UUID)是在计算机领域中常见的问题,python中内置有uuid模块,用于生成RFC 4122标准的唯一标识符(UUID)。下面介绍如何使用Python中uuid模块生成唯一标识符。 1. 安装UUID模块 Python中内置了uuid模块,无需安装任何库。 2. 使用Python内置的uuid.uuid1()方法生成UUID 使用uuid…

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