Python hashlib模块详情

yizhihongxing

哈希函数是一种将任意长度的数据映射到固定长度输出的函数。Python的hashlib模块提供了一组接口,用于计算各种哈希算法的消息摘要,包括常见的MD5和SHA1算法,也包括SHA256、SHA384、SHA512等。现在,我们来详细了解Python hashlib模块的使用。

一、哈希函数的基本用法

哈希函数可以用于数字签名、密码加密、文件完整性校验等场景。使用hashlib模块,可以轻松地做到这些操作。

1.1 计算字符串的哈希值

import hashlib

str = 'Hello, hash!'
md5 = hashlib.md5()
md5.update(str.encode('utf-8'))
print(md5.hexdigest())

sha1 = hashlib.sha1()
sha1.update(str.encode('utf-8'))
print(sha1.hexdigest())

sha256 = hashlib.sha256()
sha256.update(str.encode('utf-8'))
print(sha256.hexdigest())

在上面的例子中,我们使用三种方法计算了字符串 'Hello, hash!' 的 MD5、SHA-1、SHA-256 哈希值,并打印出了十六进制表示的消息摘要。

计算哈希值的流程如下:

  1. 创建一个消息摘要对象;
  2. 将消息用 UTF-8 编码转换为字节流,更新消息摘要对象;
  3. 输出哈希值。

1.2 计算文件的哈希值

import hashlib

with open('test.txt', 'rb') as f:
    md5 = hashlib.md5()
    while True:
        data = f.read(1024 * 4)
        if not data:
            break
        md5.update(data)
    print(md5.hexdigest())

在上面的例子中,我们使用了 MD5 算法计算了文件 'test.txt' 的哈希值,并打印出了十六进制表示的消息摘要。

二、哈希函数的高级用法

2.1 HMAC算法

HMAC (Hash-based Message Authentication Code) 算法是基于哈希函数和密钥的消息认证码算法。它可以用于验证消息的完整性和真实性。

import hashlib
import hmac

message = 'Hello, HMAC!'
secret = b'secret'
hmac_md5 = hmac.new(secret, message.encode('utf-8'), digestmod=hashlib.md5)
print(hmac_md5.hexdigest())

sha1 = hashlib.sha1(secret + message.encode('utf-8'))
print(sha1.hexdigest())

在上面的例子中,我们使用了 HMAC 算法和两种哈希函数计算了消息 'Hello, HMAC!' 的哈希值,并打印出了十六进制表示的消息摘要。

计算 HMAC 值的流程如下:

  1. 创建 HMAC 对象,传入密钥和消息;
  2. 调用 HMAC 对象的 update() 方法,更新消息,输出哈希值(或调用 digest()、hexdigest() 方法得到哈希值)。

2.2 加盐哈希

将密码进行哈希存储时,单纯使用哈希会遇到「彩虹表」攻击。加盐哈希则是为了防止彩虹表攻击,随机生成一段盐值加到密码上,再一起进行哈希。

import hashlib
import os

password = '123456'
salt = os.urandom(8)  # 随机生成 8 字节的盐值
print('Salt:', salt.hex())

# 使用 sha256 计算加盐哈希值
sha256 = hashlib.sha256()
sha256.update(password.encode('utf-8') + salt)
print('Hash:', sha256.hexdigest())

在上面的例子中,我们随机生成了 8 字节的盐值,并将盐值和密码一起使用 SHA-256 算法计算了加盐哈希值。

三、总结

我们通过本篇攻略了解了 Python hashlib 模块的基本用法和高级用法,掌握了如何对字符串和文件进行哈希计算、使用 HMAC 算法进行消息认证码计算、以及如何使用盐值进行加盐哈希。除此之外,还有更多的哈希算法和用法值得我们去探索。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python hashlib模块详情 - Python技术站

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

相关文章

  • python的常见矩阵运算(小结)

    下面是关于“Python的常见矩阵运算(小结)”的完整攻略。 1. 矩阵的创建 在Python中,我们可以使用numpy模块来创建矩阵。下面是一些常见的矩阵创建方法: 1.1 通过列表创建矩阵 import numpy as np # 通过列表创建矩阵 matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) …

    python 2023年5月13日
    00
  • python pandas实现excel转为html格式的方法

    下面是python pandas实现excel转为html格式的方法的完整实例教程。 1. 安装依赖库 首先需要安装 pandas 库,可以通过 pip 来安装: pip install pandas 2. 导入库并读取数据 接下来需要导入相应的库并读取数据,将 Excel 文件读入 pandas 的 dataframe 中,这里以一个名为 sheet1 的…

    python 2023年5月13日
    00
  • windows下python安装小白入门教程

    下面是“windows下python安装小白入门教程”的完整攻略: 第一步:下载Python安装包 打开Python官网,进入“Downloads”页面。 在“Downloads”页面中,你需要点击“Latest Python 3 Release – Python x.x.x”链接(其中的“x.x.x”为最新的Python版本号),进入到下载页面。 在下载页…

    python 2023年5月14日
    00
  • Python图像滤波处理操作示例【基于ImageFilter类】

    Python 图像滤波处理操作是图像处理中的重要部分。在 Python 中,可以使用 ImageFilter 类来实现图像滤波操作。下面是实现这个操作的完整攻略: ImageFilter 类 ImageFilter 类包含了一些常见的图像滤波算法,可以通过不同的方法对图像进行处理。可以通过导入 pillow 库中的 ImageFilter 类来使用这些功能。…

    python 2023年5月18日
    00
  • 使用Python爬虫库requests发送表单数据和JSON数据

    在Python中,requests是一个常用的HTTP客户端库,可以用于发送HTTP请求和处理HTTP响应。requests库可以发送表单数据和JSON数据。以下是详细讲解使用Python爬虫库requests发送表单数据和JSON数据的攻略,包含两个例。 发送表单数据 发送表单数据是常见的HTTP请求之一。可以使用requests库的post()函数发送表…

    python 2023年5月15日
    00
  • python字典通过值反查键的实现(简洁写法)

    首先需要了解,在 Python 中,字典是一种 key-value 键值对的数据结构,其中的 key 是唯一的,而 value 则可以重复。如果想通过字典中的 value 值来获取对应的 key 值,可以使用以下代码: my_dict = {"A": 1, "B": 2, "C": 3} my_va…

    python 2023年5月13日
    00
  • 详解Python 重学requests发起请求的基本方式

    以下是关于Python重学requests发起请求的基本方式的攻略: 详解Python重学requests发起请求的基本方式 requests是一个流行的HTTP库,用于向Web服务器发送HTTP请求和接收响应。以下是Python重学requests发起请求的基本方式的攻略: 发送GET请求 以下是使用requests库发送GET请求的示例: import …

    python 2023年5月14日
    00
  • Django笔记三十五之admin后台界面介绍

    本文首发于公众号:Hunter后端 原文链接:Django笔记三十五之admin后台界面介绍 这一篇介绍一下 Django 的后台界面使用。 Django 自带了一套后台管理界面,可用于我们直接操作数据库数据,本篇笔记目录如下: 创建后台账号以及登录操作 注册后台显示的数据表 列表字段的显示操作 字段值的修改操作 列表页的执行操作 1、创建后台账号以及登录操…

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