Python密碼學基礎 Python加密算法庫實戰

python在密碼學領域常用場景包括對稱加密、哈希處理和非對稱加密。1.使用cryptography庫實現aes-gcm對稱加密,可加密和解密數據,需注意nonce唯一性和密鑰保密;2.用hashlib結合salt及bcrypt實現安全密碼存儲,避免使用md5或sha-1;3.通過pycryptodome進行rsa非對稱加密,適合小數據加密和數字簽名,私鑰必須嚴格保密。這些方法覆蓋了常見需求,推薦使用成熟庫并遵循最佳實踐以確保安全性。

Python密碼學基礎 Python加密算法庫實戰

python 在密碼學領域的應用非常廣泛,尤其適合用來實現加密、解密、簽名和驗證等操作。如果你是剛接觸這個方向的開發者,可能會對 Python 提供哪些加密庫、怎么用它們做基本的加解密感到有點迷茫。其實只要掌握幾個常用庫和使用方式,就能快速上手實戰。

下面從幾個實際場景出發,說說你最可能需要用到的幾種情況和做法。


使用 cryptography 做對稱加密(AES)

在很多場景下,我們只需要用一個密鑰來加密和解密數據,這時候對稱加密是最直接的選擇。常用的算法有 AES(高級加密標準),而 Python 的 cryptography 庫就很好地支持它。

立即學習Python免費學習筆記(深入)”;

舉個例子:你想把一段文本加密后保存到文件或數據庫里,之后還能還原回來。

  • 安裝方法:pip install cryptography
  • 推薦使用 AES-GCM 模式,因為它不僅加密還帶認證,防止數據被篡改
from cryptography.hazmat.primitives.ciphers.aead import AESGCM import os  key = AESGCM.generate_key(bit_length=256) aesgcm = AESGCM(key) nonce = os.urandom(12)  # 必須唯一且不可重復使用 data = b"這是要加密的數據" encrypted = aesgcm.encrypt(nonce, data, None) decrypted = aesgcm.decrypt(nonce, encrypted, None)

注意點:

  • nonce 不能重復使用,否則會破壞安全性
  • 加密后的數據通常需要連同 nonce 一起存儲或傳輸,但不需要保密
  • 密鑰必須安全保管,泄露了就等于數據也泄露了

使用 hashlib 實現哈希計算與密碼存儲

很多時候我們不直接存儲用戶密碼,而是存儲它的哈希值。這時候就要用到像 SHA-256、SHA-3 這類哈希算法。

比如注冊登錄系統中,用戶輸入密碼后,程序應該只保留它的哈希結果:

import hashlib  password = b"user_password_123" hash_obj = hashlib.sha256(password) print(hash_obj.hexdigest())

更推薦的做法是加上 salt(鹽值)并使用專門的密碼哈希函數如 bcrypt 或 scrypt:

pip install bcrypt
import bcrypt  password = b"mysecretpassword" salt = bcrypt.gensalt() hashed = bcrypt.hashpw(password, salt) # 驗證時 if bcrypt.checkpw(password, hashed):     print("匹配")

要點:

  • 不要用 MD5 或 SHA-1,這些已經被證明不夠安全
  • 加鹽是為了防止彩虹表攻擊
  • 選擇 bcrypt、scrypt 或 argon2 更適合密碼存儲

使用 PyCryptodome 實現非對稱加密(RSA)

當你需要一對密鑰(公鑰和私鑰),并且希望別人用你的公鑰加密信息,只有你能用私鑰解密,這時候就需要非對稱加密。RSA 是常見的一種方式。

安裝方法:pip install pycryptodome

生成密鑰對并加密:

from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_OAEP  key = RSA.generate(2048) private_key = key.export_key() public_key = key.publickey().export_key()  # 用公鑰加密 cipher_rsa = PKCS1_OAEP.new(RSA.import_key(public_key)) encrypted_data = cipher_rsa.encrypt(b"Secret message")  # 用私鑰解密 cipher_rsa = PKCS1_OAEP.new(RSA.import_key(private_key)) decrypted_data = cipher_rsa.decrypt(encrypted_data)

注意事項:

  • 非對稱加密適合小數據,不適合大文件
  • 一般用于傳輸對稱密鑰或簽名
  • 私鑰必須嚴格保密,丟了就無法恢復

小結

以上幾種情況涵蓋了大多數 Python 開發者在密碼學方面的需求。你可以根據具體業務選擇合適的加密方式:

  • 對稱加密 → 數據量大、速度快,適合本地加密
  • 哈希處理 → 存儲密碼、校驗完整性
  • 非對稱加密 → 安全通信、數字簽名

基本上就這些。別看步驟多,只要熟悉流程,用起來并不難。不過還是那句話,密碼學是個專業領域,自己實現算法風險很大,最好使用成熟庫,并遵循最佳實踐。

? 版權聲明
THE END
喜歡就支持一下吧
點贊6 分享