Python で安全な AES-256 暗号化と復号化を実装するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-21 07:17:09
オリジナル
154 人が閲覧しました

How to Implement Secure AES-256 Encryption and Decryption in Python?

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

メッセージとキーを操作する PyCrypto を使用した効率的な暗号化および復号化関数を構築するには、特定の考慮事項を考慮する必要があります。

キーの配置とエントロピー:

提供されたキーが期待どおりの長さであることを確認することが重要です。 PyCrypto では、長さが 32 バイトの強力なキーを使用することを推奨しています。これを実現するには、SHA-256 でキーをハッシュし、結果のダイジェストを暗号化キーとして使用します。

暗号化モード:

AES 暗号化の場合、Cipher Block Chaining ( CBC) モードが一般的に使用されます。暗号文の連続ブロックを初期化ベクトル (IV) と組み合わせることで、セキュリティが強化されます。

初期化ベクトル (IV):

IV は、次のようなランダムな値です。暗号化中に暗号文の先頭に追加されます。これにより、暗号化された各メッセージの一意性が保証され、攻撃者が暗号文内のパターンを利用するのを防ぎます。暗号化と復号化に異なる IV を指定できますが、暗号化操作ごとに一意の IV を使用することが重要です。

実装:

以下のサンプル実装には、次の考慮事項が組み込まれています。 :

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:])]
ログイン後にコピー

この実装では、キーが 32 バイトに安全にハッシュされ、暗号化に CBC モードが使用され、暗号化中にランダムな IV が生成されます。復号化関数は、暗号文から IV を復元し、それを使用して暗号化プロセスを元に戻します。

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

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