Python hashlib模块详情

哈希函数是一种将任意长度的数据映射到固定长度输出的函数。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安装cryptography报错问题

    当我们在Python中安装cryptography时,可能会遇到各种各样的错误。这些错误可能是由于缺少依赖项、版本不兼容或其他原因导致的。本攻略将介绍如何解决Python安装cryptography报错问题,并提供两个示例。 解决方法 在Python中安装cryptography时,我们可以尝试以下方法来解决报错问题: 确认Python版本和依赖项版本是否兼…

    python 2023年5月13日
    00
  • python将多个py文件和其他文件打包为exe可执行文件

    要将多个.py文件和其他文件打包成可执行文件,可以使用pyinstaller这个工具。下面是使用pyinstaller打包exe的完整攻略: 1. 环境准备 1.1 安装pyinstaller 在命令行中执行以下命令安装pyinstaller: pip install pyinstaller 1.2 配置环境变量 将Python3安装目录的Scripts文件…

    python 2023年6月3日
    00
  • Django 如何使用日期时间选择器规范用户的时间输入示例代码详解

    当用户需要在表单中输入日期或者时间时,我们很容易遇到很多问题,例如用户可以输入错误的日期格式、或者输入的时间不符合我们预期的范围。而 Django 内置了一些日期时间选择器来帮助我们规范用户输入。以下是如何使用日期时间选择器规范用户的时间输入的攻略: 1. 添加日期时间选择器组件 在 Django 中,可以使用 widgets 添加日期时间选择器组件来规范用…

    python 2023年6月2日
    00
  • Python数据结构之队列详解

    Python数据结构之队列详解 队列是一种常用的数据结构,它遵循先进先出(FIFO)的原则,即先进入队列的元素先被取出。在Python中,我们可以使用列表或deque模块来实现队列。在本攻略中,我们将介绍队列的基本概念、实现方法和常用操作,并提供两个示例来说明如何使用队列进行数据处理。 队列的基本概念 队列是一种线性数据结构,它包含两个基本操作:入队和出队。…

    python 2023年5月14日
    00
  • Python 文件操作方法总结

    Python文件操作方法总结 概述 在Python中,文件操作是一项十分重要和常用的内容。本篇攻略将系统地总结Python文件操作的方法,包括文件打开、读写以及路径操作等方面。 文件打开 在Python中打开一个文件,需要使用内置函数 open()。open() 函数有两个必须的参数,即文件名和权限,常用的权限有 r(读取模式)、w(写入模式)、a(附加模式…

    python 2023年5月13日
    00
  • 解决python写的windows服务不能启动的问题

    我先简单介绍一下在Windows上使用Python编写windows服务的方法: Python中提供了win32service模块,可以使用它来创建、控制Windows服务。但是,由于Windows服务是需要管理员权限的,所以在编写时需要特别注意运行环境以及文件读写权限等问题。如果没有考虑到这些因素,可能会导致服务无法启动、运行出错等问题。 如果遇到了无法启…

    python 2023年6月3日
    00
  • windows下python安装paramiko模块和pycrypto模块(简单三步)

    下面给出“windows下python安装paramiko模块和pycrypto模块(简单三步)”的完整攻略。 一、安装pip 由于python自带了一个包管理工具pip,我们可以通过pip来安装需要的库。如果你的电脑已经安装了pip,可以跳过这一步。否则,请按照以下步骤安装pip。 在命令行中输入以下命令(注意大小写): python get-pip.py…

    python 2023年5月14日
    00
  • python中列表(list)和元组(tuple)的深入讲解

    Python中列表(List)和元组(Tuple)的深入讲解 Python中的列表(List)和元组(Tuple)是两种常用的数据类型,它们都可以用来存储多个元素。本文将深入讲解Python中列表和元组的区别、创建、访问、修改、删除等操作,并提供两个示例说明。 列表(List)和元组(Tuple)的区别 列表和元组的最大区别在于它们的可变性。列表是可变的,可…

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