ホームページ > バックエンド開発 > Python チュートリアル > PyCrypto AES-256 を安全な暗号化と復号化にどのように使用できますか?

PyCrypto AES-256 を安全な暗号化と復号化にどのように使用できますか?

DDD
リリース: 2024-11-28 20:59:15
オリジナル
765 人が閲覧しました

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

PyCrypto AES-256 による安全な暗号化と復号化

PyCrypto は、Python での暗号化操作のための堅牢なライブラリです。一般的なタスクの 1 つは、機密データの保護に使用される業界標準の暗号化アルゴリズムである 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 (Cipher Block Chaining) モードで AES-256 を使用します。ブロック内のデータを暗号化するには CBC モードが推奨され、各ブロックが一意に暗号化されることを保証するために IV が使用されます。

IV に関する考慮事項:

IV は重要な値です。安全に生成する必要があります。暗号化と復号化に異なる IV を使用しても結果には影響しませんが、復号化を成功させるには、IV が暗号化中に使用された IV と一致する必要があります。

以上がPyCrypto AES-256 を安全な暗号化と復号化にどのように使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート