」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何使用 PyCrypto AES-256 進行安全加密和解密?

如何使用 PyCrypto AES-256 進行安全加密和解密?

發佈於2024-11-13
瀏覽:615

How Can PyCrypto AES-256 Be Used for Secure Encryption and Decryption?

使用 PyCrypto AES-256 進行安全加密和解密

PyCrypto 是一個強大的 Python 加密操作庫。一項常見任務是使用 AES-256 加密和解密數據,AES-256 是一種用於敏感資料保護的業界標準加密演算法。

問題定義:

建構可靠的加密使用 PyCrypto的解密功能需要解決幾個潛在問題:

  • 確保適當的金鑰長度
  • 選擇合適的加密模式
  • 了解初始化向量(IV)的作用和使用

增強安全性和功能性:

為了解決這些問題,開發了使用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 增強功能:

  • 金鑰使用以下方式進行雜湊處理SHA-256 確保32 位元組長度。
  • 為每個加密操作產生一個新的 IV,提供額外的保護攻擊。

加密模式

此實作在 CBC(密碼區塊連結)模式下使用 AES-256。建議使用 CBC 模式對區塊中的資料進行加密,並使用 IV 來確保每個區塊都是唯一加密的。

IV 注意事項:

IV 是一個重要值必須安全地產生。使用不同的IV進行加密和解密不會影響結果,但IV必須與加密時使用的IV配對才能解密成功。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3