跳過到頁腳內容
PYTHON 幫助

hashlib Python(開發者指南)

Python 中的hashlib模組是一個功能強大的工具,可用於處理安全雜湊和訊息摘要演算法。 該模組為許多安全雜湊演算法提供了標準接口,使其成為需要確保資料完整性和安全性的開發人員的多功能選擇。 本文稍後也將介紹IronSoftware出品的一款功能強大的 PDF 生成庫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的雜湊建構函式產生 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 Iron Software is Awesome')
# Get the hexadecimal representation of the hash
hash_hex = hash_object.hexdigest()  # hash_hex is the hexadecimal digest
print(hash_hex)  # Output the hash
# Output: 6fc0c7d6af8eb51f0cd89281db55c6a6b76b5310226fa5af2272a8eb42cc1bfe
import hashlib

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

進階功能

*多執行緒支援*:使用加密雜湊函數時,如果一次提供超過 2047 位元組的數據,hashlib 會在計算雜湊值時釋放全域解釋器鎖定 (GIL),從而在多執行緒應用程式中實現更好的效能。 自訂雜湊演算法**:如果您的 Python 發行版的 hashlib 連結到提供額外演算法的 OpenSSL 版本,則可以透過 new() 方法存取它們。

使用 HashLib 模組進行各種類型的哈希運算

1. 簡單哈希

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
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!'

# MD5, SHA-256, and SHA-512 hash generation
hash_md5 = hashlib.md5(data).hexdigest()
hash_sha256 = hashlib.sha256(data).hexdigest()
hash_sha512 = hashlib.sha512(data).hexdigest()

# Print each hash
print("MD5 Hash (hex):", hash_md5)
print("SHA-256 Hash (hex):", hash_sha256)
print("SHA-512 Hash (hex):", hash_sha512)
# Output:
# MD5 Hash (hex): 65a8e27d8879283831b664bd8b7f0ad4
# SHA-256 Hash (hex): dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f
# SHA-512 Hash (hex): 374d794a95cdcfd8b35993185fef9ba368f160d8daf432d08ba9f1ed1e5abe6cc69291e0fa2fe0006a52570ef18c19def4e617c33ce52ef0a6e5fbe318cb0387
import hashlib

# Hashing with different digest sizes
data = b'Hello, World!'

# MD5, SHA-256, and SHA-512 hash generation
hash_md5 = hashlib.md5(data).hexdigest()
hash_sha256 = hashlib.sha256(data).hexdigest()
hash_sha512 = hashlib.sha512(data).hexdigest()

# Print each hash
print("MD5 Hash (hex):", hash_md5)
print("SHA-256 Hash (hex):", hash_sha256)
print("SHA-512 Hash (hex):", hash_sha512)
# Output:
# MD5 Hash (hex): 65a8e27d8879283831b664bd8b7f0ad4
# SHA-256 Hash (hex): dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f
# SHA-512 Hash (hex): 374d794a95cdcfd8b35993185fef9ba368f160d8daf432d08ba9f1ed1e5abe6cc69291e0fa2fe0006a52570ef18c19def4e617c33ce52ef0a6e5fbe318cb0387
PYTHON

程式碼使用提供的資料產生 MD5、SHA-256 和 SHA-512 雜湊值。

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
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

這段程式碼示範如何使用 Blake2b 演算法建立帶有金鑰的雜湊值。

4. 隨機哈希

import hashlib
import os

# Randomized hashing example using PBKDF2-HMAC
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
import hashlib
import os

# Randomized hashing example using PBKDF2-HMAC
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。 例如,使用 IronPDF 的 Chrome PDF 渲染器將網頁渲染為 PDF

跨平台支援。

IronPDF 專為 Python 3+ 版本設計,可在 Windows、Mac、Linux 或雲端平台上運作。

IronPDF 也提供.NETJavaPythonNode.js版本。

編輯和簽署

使用者可以使用 IronPDF 設定屬性、新增密碼和權限等安全措施,以及對 PDF應用數位簽章

頁面模板和設置

IronPDF 可讓您自訂 PDF 文檔,包括頁首、頁尾、頁碼和可調整的邊距。 它還支援響應式佈局和自訂紙張尺寸。

標準合規性

IronPDF 軟體包也符合 PDF/A 和 PDF/UA 等 PDF 標準。 它支援UTF-8 字元編碼,並可處理圖像、CSS 和字體等資源。

使用 IronPDF 和 HashLib 模組產生 PDF 文檔

IronPDF 先決條件

  1. IronPDF使用 .NET 6.0 作為其底層技術。 因此,請確保您的系統上已安裝.NET 6.0 執行階段環境
  2. Python 3.0+:您需要安裝 Python 版本 3 或更高版本。
  3. Pip:安裝 Python 套件安裝程式pip來安裝 IronPDF 套件。

首先,我們建立一個 Python 檔案來新增腳本。在本例中,我們使用Visual Studio Code作為程式碼編輯器。

開啟 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 Iron Software is Awesome</p>"
content += "<h2> Simple hashing example</h2>"

# Simple hashing example
data = b'IronPDF from Iron Software 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")
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 Iron Software is Awesome</p>"
content += "<h2> Simple hashing example</h2>"

# Simple hashing example
data = b'IronPDF from Iron Software 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 雜湊值( b&#39;IronPDF from Iron Software is Awesome&#39; )。 2.使用不同摘要長度進行雜湊:本節示範使用 MD5、SHA-256 和 SHA-512 演算法對確切的資料字串進行雜湊。 3.鍵值雜湊範例:此範例使用指定鍵( b&#39;pseudorandom key&#39; )的blake2b雜湊函數對資料執行鍵值雜湊。 4.隨機哈希範例:利用 PBKDF2-HMAC 演算法和 SHA-256 產生隨機產生鹽的隨機哈希。

  1. 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"
from ironpdf import * 
# Apply your license key
License.LicenseKey = "key"
PYTHON

結論

hashlib 模組是 Python 標準函式庫的重要組成部分,它為各種應用程式提供強大且安全的雜湊函數。 無論您是要確保資料完整性、安全地儲存密碼,還是建立數位簽名,hashlib 都能提供必要的工具。 另一方面, IronPDF是一個功能強大的 PDF 生成和 PDF 處理庫。 借助這兩個庫,開發人員可以快速生成哈希值並將其儲存為 PDF 格式。

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。