PYTHON 幫助

在 Python 中使用 PyCryptodome 進行加密

發佈 2024年7月1日
分享:

在數位轉型的時代,健全的加密機制的重要性不可被低估。 密碼學確保數據在各種網絡和系統中傳輸時的安全性和隱私性。 PyCryptodome 是一個在密碼學領域中脫穎而出的 Python 庫,提供多種功能來促進安全數據處理,例如認證加密模式(GCM、CCM、EAX、SIV、OCB)以及加速的 AES 一流支持。 本文深入探討了 PyCryptodome 的最新正式版本,探討其功能、使用案例、簡化的安裝過程,以及如何在各種應用中有效利用它。 我們還將使用一個單獨的 C# 庫 IronPDF 搭配 PyCryptodome 創建加密的 PDF 文件。

PyCryptodome 概述

PyCryptodome 是一個自包含的 Python 套件,用於低階密碼學原語。 它被設計為舊版 PyCrypto 庫的即插即用替代品,解決了許多舊版的限制並擴展了其功能。 它提供了廣泛的加密算法和協議,使其成為開發人員在應用程式中需要實現安全功能時的寶貴工具。

主要功能

  1. 廣泛的演算法支援:PyCryptodome 支援廣泛的加密演算法,包括 AES、RSA、DSA 等多種演算法。 這種廣泛的支持確保開發人員可以找到滿足各種加密需求所需的工具。

  2. 易於使用:該函式庫設計為易於使用,提供清晰且簡潔的 API,使即使是加密知識有限的人也能有效地實現安全功能。

  3. 主動維護:與其前身 PyCrypto 不同,PyCryptodome 積極維護,定期更新和改進,確保與最新 Python 版本和安全標準的兼容性。

  4. 自包含:PyCryptodome 不需要任何外部依賴,使其易於在不同環境中安裝和使用。

  5. 與現有庫的整合:PyCryptodome 可以無縫整合其他 Python 庫和框架,增強其在各種應用中的實用性。

安裝

安裝 PyCryptodome 是一個簡單的過程,這要歸功於其自包含的特性。 可以透過 Python 的套件管理工具 pip 使用以下命令安裝:

pip install pycryptodome

核心概念和模組

PyCryptodome組織為幾個模組,每個模組各自負責密碼學的不同方面。 理解這些模組對於有效利用該庫至關重要。

雜湊

散列函數是加密技術的基礎,提供了一種從任意數據生成固定大小散列值的方法。 PyCryptodome 透過 Crypto.Hash 模組支援各種雜湊算法。

使用 SHA-256 雜湊函數的範例

from Crypto.Hash import SHA256
hash_object = SHA256.new(data=b'Hello, PyCryptodome!')
print(hash_object.hexdigest())
PYTHON

PyCryptodome(開發者運作方式):圖1 - 散列輸出

對稱加密

對稱加密涉及使用相同的密鑰進行加密和解密。 PyCryptodome 的 Crypto.Cipher 模組支持多種對稱加密算法,包括 AES、DES 等。

AES加密和解密範例

from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes

key = get_random_bytes(16)  # 16 bytes for AES-128
cipher = AES.new(key, AES.MODE_EAX)
data = b'Secret Message'
nonce = cipher.nonce
ciphertext, tag = cipher.encrypt_and_digest(data)

# Decryption
cipher = AES.new(key, AES.MODE_EAX, nonce=nonce)
plaintext = cipher.decrypt(ciphertext)
try:
    cipher.verify(tag)
    print("The message is authentic:", plaintext)
except ValueError:
    print("Key incorrect or message corrupted")
PYTHON

PyCryptodome(它對開發者的工作原理):圖2 - AES輸出

非對稱加密

非對稱加密使用一對密鑰:公鑰用於加密,私鑰用於解密。 PyCryptodome 的 Crypto.PublicKey 模組提供對 RSA、DSA 和 ECC 的支援。(橢圓曲線密碼學).

RSA加密和解密範例

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP

key = RSA.generate(2048)
public_key = key.publickey()
cipher = PKCS1_OAEP.new(public_key)
ciphertext = cipher.encrypt(b'Secret Message')

# Decryption
cipher = PKCS1_OAEP.new(key)
plaintext = cipher.decrypt(ciphertext)
print(plaintext)
PYTHON

PyCryptodome(開發人員如何運作):圖3 - RSA輸出

金鑰導出

密鑰衍生函數從密碼或口令生成加密密鑰。 這在基於密碼的加密中尤其有用。 PyCryptodome 支援 PBKDF2、scrypt 和其他密钥衍生算法。

使用 PBKDF2 的範例

from Crypto.Protocol.KDF import PBKDF2
from Crypto.Random import get_random_bytes

password = b'my secret password'
salt = get_random_bytes(16)
key = PBKDF2(password, salt, dkLen=32, count=1000000)
print(key)
PYTHON

PyCryptodome(它如何為開發人員工作):圖4 - PBKDF2輸出

使用案例

密碼管理

密碼管理器受益於 PyCryptodome 的密鑰導出功能,以安全地存儲和檢索用戶密碼。 透過使用像 PBKDF2 這樣的強大密鑰導出算法,開發人員可以確保所存儲的密碼對暴力破解攻擊具有抵抗力。

密碼保護的範例

from Crypto.Protocol.KDF import PBKDF2
from Crypto.Random import get_random_bytes
from Crypto.Cipher import AES

# Derive a strong key from a password
password = b'user_password'
salt = get_random_bytes(16)
key = PBKDF2(password, salt, dkLen=32, count=1000000)

# Encrypt the password before storing
cipher = AES.new(key, AES.MODE_EAX)
stored_password = b'ActualPassword'
nonce = cipher.nonce
ciphertext, tag = cipher.encrypt_and_digest(stored_password)

# Store ciphertext, nonce, salt, and tag securely
password_data = {
    'ciphertext': ciphertext,
    'nonce': nonce,
    'salt': salt,
    'tag': tag
}

# Decrypt the password when needed
key = PBKDF2(password, password_data['salt'], dkLen=32, count=1000000)
cipher = AES.new(key, AES.MODE_EAX, nonce=password_data['nonce'])
plaintext = cipher.decrypt(password_data['ciphertext'])
try:
    cipher.verify(password_data['tag'])
    print("The stored password is authentic:", plaintext)
except ValueError:
    print("Key incorrect or password corrupted")
PYTHON

PyCryptodome(對開發者的工作原理):圖5 - 確保密碼輸出

IronPDF for Python

IronPDF 是一個強大的 Python PDF 生成庫,允許開發人員輕鬆創建、編輯和操作 PDF 文件。 它提供了廣泛的功能,從將 HTML 轉換為 PDF 到合併多個 PDF,使其成為自動化文檔工作流程的理想選擇。 結合使用 PyCryptodome 這個強大的加密運算庫,開發者可以為其 PDF 文件添加安全功能,如加密和數位簽章。 此整合特別適用於需要高安全性和數據完整性的應用程序,例如在金融、法律或機密環境中。

若要安裝 IronPDF,您可以使用 Python 套件管理器 pip。 以下是入門指南:

pip install ironpdf

PyCryptodome(對開發人員的運作原理):圖6 - IronPDF

安裝完成後,您可以開始使用 IronPDF 來創建和操作 PDF。 以下是一個簡單的範例,說明如何使用IronPDF創建PDF,然後使用PyCryptodome對其進行加密:

from ironpdf import *     
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
import os

renderer = ChromePdfRenderer()
pdfFromUrl = renderer.RenderUrlAsPdf("https://ironpdf.com/")
pdfFromUrl.SaveAs("output.pdf")

# Encrypt the PDF with AES
def encrypt_file(file_name, key):
    cipher = AES.new(key, AES.MODE_CBC)
    iv = cipher.iv
    with open(file_name, 'rb') as f:
        data = f.read()
    encrypted_data = iv + cipher.encrypt(pad(data, AES.block_size))
    with open(file_name + '.enc', 'wb') as f:
        f.write(encrypted_data)

# Example usage
key = os.urandom(16)  # AES key must be either 16, 24, or 32 bytes long
encrypt_file("output.pdf", key)
PYTHON

此腳本展示了使用IronPDF創建一個簡單PDF,然後使用PyCryptodome的AES進行加密,為構建更複雜和安全的PDF處理應用程序提供了基礎。

PyCryptodome(對開發者的運作方式):圖 7 - 加密文件輸出

結論

總之,PyCryptodome 是一個強大且多功能的 Python 函式庫,顯著提升了開發人員的加密運算能力,提供多種演算法並易於與其他工具如 IronPDF 整合。 依靠其全面的功能集,包括支援認證加密模式、對稱和非對稱加密、雜湊和密鑰導出,PyCryptodome能滿足現代應用程式對強大安全措施的需求。 其易用性、積極的維護以及自身獨立的特性使其成為在各種情況中實現安全資料處理的不可或缺的工具,從密碼管理到安全文件生成和加密,在日益數位化的世界中確保資料的完整性和機密性。

有關IronPDF授權的詳細資訊,請參閱IronPDF授權頁面。 如需進一步探索,請查看我們關於將 HTML 轉換為 PDF 的詳細教程。

< 上一頁
在 Python 中使用 WhisperX 進行轉錄
下一個 >
OpenTelemetry Python(對開發者的運作方式)

準備開始了嗎? 版本: 2024.11.1 剛剛發布

免費 pip 安裝 查看許可證 >