python在密碼學領域常用場景包括對稱加密、哈希處理和非對稱加密。1.使用cryptography庫實現aes-gcm對稱加密,可加密和解密數據,需注意nonce唯一性和密鑰保密;2.用hashlib結合salt及bcrypt實現安全密碼存儲,避免使用md5或sha-1;3.通過pycryptodome進行rsa非對稱加密,適合小數據加密和數字簽名,私鑰必須嚴格保密。這些方法覆蓋了常見需求,推薦使用成熟庫并遵循最佳實踐以確保安全性。
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 開發者在密碼學方面的需求。你可以根據具體業務選擇合適的加密方式:
- 對稱加密 → 數據量大、速度快,適合本地加密
- 哈希處理 → 存儲密碼、校驗完整性
- 非對稱加密 → 安全通信、數字簽名
基本上就這些。別看步驟多,只要熟悉流程,用起來并不難。不過還是那句話,密碼學是個專業領域,自己實現算法風險很大,最好使用成熟庫,并遵循最佳實踐。