「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > PyCrypto AES-256 を安全な暗号化と復号化にどのように使用できますか?

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

2024 年 11 月 13 日に公開
ブラウズ:287

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 の拡張:

  • キーは次を使用してハッシュされます。 32 バイトの長さを確保するための SHA-256。
  • 暗号化操作ごとに新しい IV が生成され、暗号化に対する追加の保護が提供されます。

暗号化モード:

この実装では、CBC (Cipher Block Chaining) モードで AES-256 を使用します。ブロック内のデータを暗号化するには CBC モードが推奨され、IV は各ブロックが確実に一意に暗号化されるようにするために使用されます。

IV に関する考慮事項:

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

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3