PYTHON帮助

hashlib Python(运作原理:开发人员指南)

发布 2025年二月19日
分享:

"(《世界人权宣言》)hashlib在Python中,模块是处理安全散列和消息摘要算法的强大工具。 该模块提供了多种安全散列算法的标准接口,是需要确保数据完整性和安全性的开发人员的多功能选择。 在文章后面,我们还将研究一个多功能的PDF生成库来自铁软件(Iron Software)称为IronPDF并编写一个使用两个库的脚本来演示它们的用法。

介绍

"(《世界人权宣言》)hashlib该模块是 Python 标准库的一部分,因此无需单独安装。 它包括各种加密哈希函数,如MD5、SHA-1、SHA-224、SHA-256、SHA-384、SHA-512以及SHA-3系列。 这些函数用于创建哈希对象,然后可以使用这些对象生成数据的哈希值。

主要功能

  1. 广泛的算法范围hashlib支持多种哈希算法,包括旧的算法如MD5和SHA-1,以及更现代的算法如SHA-256和SHA-3。

  2. 简单接口:每个哈希算法都有一个构造方法,它返回一个哈希对象。 可以使用 update 方法向此对象提供数据,并使用 digest 或 hexdigest 方法生成哈希值。

  3. 安全性:虽然像 MD5 和 SHA-1 这样的算法已知存在漏洞,但 hashlib 包括更安全的选项,如 SHA-256 和 SHA-3。

安装

hashlib是一个内置模块,不需要显式安装。

基本用法

以下是如何使用的简单示例hashlib使用 hashlib 哈希构造函数生成 SHA-256 哈希:

import hashlib
# Creating hash objects with SHA-256
hash_object = hashlib.sha256()
# Update the hash object with data
hash_object.update(b'IronPDF from IronSoftware is Awesome')
# Get the hexadecimal representation of the hash in  bytes object
hash_hex = hash_object.hexdigest() # hash_hex is digest object
print(hash_hex) # byte string
#Output: 6fc0c7d6af8eb51f0cd89281db55c6a6b76b5310226fa5af2272a8eb42cc1bfe
PYTHON

高级功能

  • 多线程支持:通过加密哈希函数,hashlib 释放了全局解释器锁(GIL)在计算哈希时,如果一次提供超过2047字节的数据,这允许在多线程应用程序中获得更好的性能。
  • 自定义哈希算法:如果您的 Python 版本的 hashlib 链接到提供附加算法的 OpenSSL 构建,您可以通过新()方法。

使用HashLib模块的各种类型的哈希

简单哈希

import hashlib
# Simple hashing example
data = b'Hello, World!'
hash_object = hashlib.sha256(data)
hex_dig = hash_object.hexdigest()
print("SHA-256 Hash:", hex_dig)
#output
SHA-256 Hash: dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f
PYTHON

该代码为传入的数据生成 SHA-256

2. 使用不同的摘要大小

import hashlib
# Hashing with different digest sizes
data = b'Hello, World!' # convert to binary data
hash_md5 = hashlib.md5(data).hexdigest()
hash_sha256 = hashlib.sha256(data).hexdigest()
hash_sha512 = hashlib.sha512(data).hexdigest()
print("MD5 Hash (hex):", hash_md5)
print("SHA-256 Hash (hex):", hash_sha256)
print("SHA-512 Hash (hex):", hash_sha512)
#output hash digest with only hexadecimal digits
MD5 Hash (hex): 65a8e27d8879283831b664bd8b7f0ad4
SHA-256 Hash (hex): dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f
SHA-512 Hash (hex): 374d794a95cdcfd8b35993185fef9ba368f160d8daf432d08ba9f1ed1e5abe6cc69291e0fa2fe0006a52570ef18c19def4e617c33ce52ef0a6e5fbe318cb0387
PYTHON

该代码使用传递的数据生成md5、sha256和sha512的哈希值。

3. 密钥哈希

import hashlib
from hashlib import blake2b
# Keyed hashing example
h = blake2b(key=b'pseudorandom key', digest_size=16)
h.update(b'message data')
print(h.hexdigest())
#output
3d363ff7401e02026f4a4687d4863ced
PYTHON

4. 随机散列

import hashlib
import os
# Randomized hashing example (Salsa20)
data = b'Hello, World!'
salt = os.urandom(16)  # Generate a random salt
hash_object = hashlib.pbkdf2_hmac('sha256', data, salt, 100000)
hex_dig = hash_object.hex()
print("Randomized Hash (SHA-256):", hex_dig)
#output
Randomized Hash (SHA-256): a2a3c1a30a2add1867d55eac97fd9c84dc679691c0f15ae09c01e1bcc63ba47a
PYTHON

这些示例涵盖了使用不同摘要大小的基本哈希。 可以根据特定要求或偏好进行调整,例如使用不同的算法或参数。

实际应用

  1. 数据完整性:通常使用哈希函数来确认记录的完整性。 通过比较原始数据的哈希值与接收数据的哈希值,您可以确保数据未被更改。

  2. 密码存储:哈希函数通常用于安全地存储密码。 系统存储的是密码的哈希而不是实际的密码。 当用户登录时,输入密码的哈希值会与存储的哈希值进行比较。

  3. 数字签名:哈希函数通常用于创建数字签名,以验证消息的真实性和完整性。

介绍IronPDF

hashlib Python((工作原理:开发人员指南)):图1 - IronPDF for Python:Python PDF库

IronPDF是一个强大的Python库,可使用HTML、CSS、图像和JavaScript创建、编辑和签署PDF。 它提供高性能能力,且内存使用量极小。 用户可以从HTML生成PDF, 并吞(意见) 分歧PDF文档,从PDF中提取文本和图像申请水印, 将PDF栅格化为图像JPEG和PNG等格式,加密PDF文件,以及更多。 IronPDF 提供广泛的 PDF 操作。

IronPDF的主要功能

HTML 转换为 PDF

用户可以将HTML文件、HTML字符串和URL转换为PDF。 例如将网页呈现为PDF使用IronPDF的Chrome PDF渲染器

跨平台支持

IronPDF 适用于 Python 3+ 版本,并可在 Windows、Mac、Linux 或云平台上运行。

IronPDF 还有以下版本.NET, Java, PythonNode.js.

编辑和签署

用户可以设置属性,添加安全性密码和权限应用数字签名使用IronPDF转换为PDF。

页面模板和设置

IronPDF允许您通过以下功能自定义PDF文档标题,页脚,译文中必须包含页码和可调整的页边距。 它还支持响应式布局和自定义纸张尺寸。

标准合规性

IronPDF 软件包也遵循诸如 PDF/A 和 PDF/UA 等 PDF 标准。 它支持UTF-8字符编码以及处理图像、CSS和字体等资源。

使用IronPDF和HashLib模块生成PDF文档

IronPDF 前提条件

  1. IronPDF.NET6.0》使用 .NET 6.0 作为底层技术。 因此,请确保.NET 6.0 运行时已安装在您的系统上。

  2. Python 3.0+:您需要安装 Python 3 或更高版本。

  3. Pip:安装 Python 包管理工具pip安装 IronPDF 软件包。

    首先,让我们创建一个Python文件来添加我们的脚本。在这个例子中,我们使用Visual Studio 代码作为代码编辑器。

    打开 Visual Studio Code 并创建一个文件,hashlibDemo.py。

    安装IronPDF库:

pip install ironpdf

然后添加下面的代码,演示如何使用IronPDF和Hashlib Python包

import hashlib
import os
from hashlib import blake2b
from ironpdf import * 
# Apply your license key
License.LicenseKey = "your key"
# Create a PDF from a HTML string using Python
content = "<h1>Awesome Iron PDF with hashlib</h1>"
content += "<p>Data for all the below examples = IronPDF from IronSoftware is Awesome</p>"
content += "<h2> Simple hashing example</h2>"
content += "<p></p>"
# Simple hashing example
data = b'IronPDF from IronSoftware is Awesome'
content += "<p>hashlib.sha256(data)</p>"
hash_object = hashlib.sha256(data)
hex_dig = hash_object.hexdigest()
print("SHA-256 Hash:", hex_dig)
content += "<p>SHA-256 Hash:"+str(hex_dig)+"</p>"
content += "<h2> Hashing with different digest sizes</h2>"
# Hashing with different digest sizes
hash_md5 = hashlib.md5(data).hexdigest()
content += "<p>hashlib.md5(data).hexdigest()</p>"
hash_sha256 = hashlib.sha256(data).hexdigest()
content += "<p>hashlib.sha256(data).hexdigest()</p>"
hash_sha512 = hashlib.sha512(data).hexdigest()
content += "<p>hashlib.sha512(data).hexdigest()</p>"
print("MD5 Hash (hex):", hash_md5)
print("SHA-256 Hash (hex):", hash_sha256)
print("SHA-512 Hash (hex):", hash_sha512)
content += "<p>MD5 Hash (hex):"+str(hash_md5)+"</p>"
content += "<p>SHA-256 Hash (hex):"+str(hash_sha256)+"</p>"
content += "<p>SHA-512 Hash (hex):"+str(hash_sha512)+"</p>"
# Keyed hashing example
content += "<h2> Keyed hashing example</h2>"
h = blake2b(key=b'pseudorandom key', digest_size=16)
content += "<p></p>"
h.update(data)
print(h.hexdigest())
content += "<p>Keyed Hash (hex):"+str(h.hexdigest())+"</p>"
# Randomized hashing example 
content += "<h2> Randomized hashing example </h2>"
salt = os.urandom(16)  # Generate a random salt
hash_object = hashlib.pbkdf2_hmac('sha256', data, salt, 100000)
content += "<p>hashlib.pbkdf2_hmac('sha256', data, salt, 100000)</p>"
hex_dig = hash_object.hex()
print("Randomized Hash (SHA-256):", hex_dig)
content += "<p>Randomized Hash (SHA-256):"+str(hex_dig)+"</p>"
#Generate PDF using IronPDF
renderer = ChromePdfRenderer()
pdf = renderer.RenderHtmlAsPdf(content)
    # Export to a file or Stream
pdf.SaveAs("Demo-hashlib.pdf")
PYTHON

代码解释

所提供的代码展示了使用Python的`hashlib`库进行各种哈希技术的用法:

  1. 简单哈希示例:计算特定数据字符串的SHA-256哈希值(来自Iron Software的IronPDF真棒).

  2. 使用不同摘要大小的哈希:本节演示使用MD5、SHA-256和SHA-512算法对相同的数据字符串进行哈希。 3. 密钥哈希示例:此示例使用指定密钥的`blake2b`哈希函数(伪随机密钥)对数据执行带密钥的哈希运算。

  3. 随机哈希示例:利用PBKDF2-HMAC算法与SHA-256生成一个带有随机生成盐值的随机哈希。5. PDF生成:在演示哈希示例之后,代码使用IronPDF生成一个PDF文档,其中包括展示哈希示例的HTML内容。

    每个示例展示了加密哈希的不同方面,例如标准哈希、带密钥的哈希和随机哈希技术。

输出

hashlib Python((工作原理:开发人员指南)):图 2 - 控制台输出示例

PDF

hashlib Python ((工作原理:开发者指南)):图 3 - 使用 IronPDF 的 PDF 输出示例

IronPDF 许可证

hashlib Python ((工作原理:开发人员指南)):图 4 - IronPDF 许可页面

IronPDF在 Python 许可证密钥上运行。 IronPDF for Python 提供免费试用许可证密钥,允许用户在购买前测试其丰富的功能。

在使用前将许可密钥放在脚本的开头IronPDF 软件包:

from ironpdf import * 
# Apply your license key
License.LicenseKey = "key"
PYTHON

结论

hashlib模块是Python标准库的核心,提供了强大且安全的散列函数以用于各种应用程序。 无论是确保数据完整性、安全存储密码,还是创建数字签名,hashlib 都提供了必要的工具。 另一方面,IronPDF是一个功能强大的PDF生成和PDF操作库。 通过这两个库,开发人员可以快速生成哈希值并将其存储为PDF格式。

乔尔迪·巴尔迪亚

乔尔迪·巴尔迪亚

软件工程师

 LinkedIn |  Website

Jordi 最擅长 Python、C# 和 C++,当他不在 Iron Software 运用技能时,他会进行游戏编程。作为产品测试、产品开发和研究的负责人之一,Jordi 为持续的产品改进增添了极大的价值。多样化的经验让他充满挑战和参与感,他说这是他在 Iron Software 工作中最喜欢的方面之一。Jordi 在佛罗里达州迈阿密长大,并在佛罗里达大学学习计算机科学和统计学。
下一步 >
XGBoost Python(其工作原理:开发者指南)