首頁 > 後端開發 > Python教學 > 如何使用 PyCrypto AES-256 進行安全加密和解密?

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

DDD
發布: 2024-11-28 20:59:15
原創
719 人瀏覽過

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

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

PyCrypto 是一個強大的 Python 加密操作庫。一項常見任務是使用 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 匹配才能解密成功。

以上是如何使用 PyCrypto AES-256 進行安全加密和解密?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板