使用 PyCrypto AES-256 進行安全加密和解密
PyCrypto 是一個強大的 Python 加密操作庫。一項常見任務是使用 AES-256 加密和解密數據,AES-256 是一種用於敏感資料保護的業界標準加密演算法。
問題定義:
建構可靠的加密使用 PyCrypto的解密功能需要解決幾個潛在問題:
增強安全性和功能性:
為了解決這些問題,開發了使用PyCrypto 的實作:
import base64 import hashlib from Crypto import Random from Crypto.Cipher import AES class AESCipher(object): def __init__(self, key): self.bs = AES.block_size self.key = hashlib.sha256(key.encode()).digest() def encrypt(self, raw): raw = self._pad(raw) iv = Random.new().read(AES.block_size) cipher = AES.new(self.key, AES.MODE_CBC, iv) return base64.b64encode(iv cipher.encrypt(raw.encode())) def decrypt(self, enc): enc = base64.b64decode(enc) iv = enc[:AES.block_size] cipher = AES.new(self.key, AES.MODE_CBC, iv) return AESCipher._unpad(cipher.decrypt(enc[AES.block_size:])).decode('utf-8') def _pad(self, s): return s (self.bs - len(s) % self.bs) * chr(self.bs - len(s) % self.bs) @staticmethod def _unpad(s): return s[:-ord(s[len(s)-1:])]
金鑰與IV 增強功能:
加密模式:
此實作在 CBC(密碼區塊連結)模式下使用 AES-256。建議使用 CBC 模式對區塊中的資料進行加密,並使用 IV 來確保每個區塊都是唯一加密的。
IV 注意事項:
IV 是一個重要值必須安全地產生。使用不同的IV進行加密和解密不會影響結果,但IV必須與加密時使用的IV配對才能解密成功。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3