"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يمكن استخدام PyCrypto AES-256 للتشفير وفك التشفير الآمن؟

كيف يمكن استخدام PyCrypto AES-256 للتشفير وفك التشفير الآمن؟

تم النشر بتاريخ 2024-11-13
تصفح:967

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

التشفير وفك التشفير الآمن باستخدام PyCrypto AES-256

PyCrypto هي مكتبة قوية لعمليات التشفير في Python. إحدى المهام الشائعة هي تشفير البيانات وفك تشفيرها باستخدام AES-256، وهي خوارزمية تشفير متوافقة مع معايير الصناعة تُستخدم لحماية البيانات الحساسة.

تعريف المشكلة:

بناء تشفير موثوق. وتتطلب وظائف فك التشفير باستخدام PyCrypto معالجة العديد من المشكلات المحتملة:

    التأكد من طول المفتاح المناسب
  • اختيار وضع التشفير المناسب
  • فهم دور واستخدام متجهات التهيئة (IVs)

تعزيز الأمان والوظائف:

لمعالجة هذه المخاوف، تم تطوير تطبيق باستخدام PyCrypto:

قاعدة الاستيراد64 استيراد هاشلب من تشفير الاستيراد عشوائي من Crypto.Cipher استيراد AES فئة AESCipher (كائن): تعريف __init__(الذات، المفتاح): self.bs = AES.block_size self.key = hashlib.sha256(key.encode()).digest() تشفير Def (الذاتي، الخام): الخام = الذات._pad(الخام) iv = Random.new().read(AES.block_size) التشفير = AES.new(self.key, AES.MODE_CBC, iv) إرجاع base64.b64encode(iv cipher.encrypt(raw.encode())) فك التشفير (الذاتي، enc): إنك = base64.b64decode(إنك) الرابع = enc[:AES.block_size] التشفير = AES.new(self.key, AES.MODE_CBC, iv) إرجاع AESCipher._unpad(cipher.decrypt(enc[AES.block_size:])).decode('utf-8') ديف _pad(self, s): إرجاع s (self.bs - len(s) % self.bs) * chr(self.bs - len(s) % self.bs) @staticmethod تعريف _unpad(s): return s[:-ord(s[len(s)-1:])]
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:])]
التحسينات الرئيسية والرابعة:

يتم تجزئة المفتاح باستخدام SHA-256 لضمان طول 32 بايت.
  • يتم إنشاء IV جديد لكل عملية تشفير، مما يوفر حماية إضافية ضد الهجمات.
وضع التشفير

: يستخدم هذا التطبيق AES-256 في وضع CBC (Cipher Block Chaining). يوصى بوضع CBC لتشفير البيانات في الكتل، ويتم استخدام IVs لضمان تشفير كل كتلة بشكل فريد.

اعتبارات IV

: يعتبر IV قيمة مهمة التي يجب أن يتم إنشاؤها بشكل آمن. لا يؤثر استخدام IVs مختلفة للتشفير وفك التشفير على النتيجة، ولكن يجب أن يتطابق IV مع IV المستخدم أثناء التشفير حتى ينجح فك التشفير.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3