Vigenere Cipher: Encryption, Decryption, and Testing - كتاب الأمن السيبراني - الصف 12 - الفصل 1 - المملكة العربية السعودية

الكتاب: كتاب الأمن السيبراني - الصف 12 - الفصل 1 | المادة: الأمن السيبراني | المرحلة: الصف 12 | الفصل الدراسي: 1

الدولة: المملكة العربية السعودية | المنهج: المنهج السعودي - وزارة التعليم

الدرس: Vigenere Cipher: Encryption, Decryption, and Testing

📚 معلومات الصفحة

الكتاب: كتاب الأمن السيبراني - الصف 12 - الفصل 1 | المادة: الأمن السيبراني | المرحلة: الصف 12 | الفصل الدراسي: 1

الدولة: المملكة العربية السعودية | المنهج: المنهج السعودي - وزارة التعليم

نوع المحتوى: درس تعليمي

مستوى الصعوبة: متوسط

📝 ملخص الصفحة

تقدم هذه الصفحة شرحًا عمليًا لشفرة فيجينير، وهي طريقة تشفير متعددة الأبجدية تستخدم في علوم الحاسب والأمن السيبراني. تبدأ الصفحة بشرح عملية التشفير باستخدام لغة البرمجة بايثون، حيث يتم تحويل النص العادي إلى قيم ASCII وإضافة كلمة مفتاحية مع تطبيق عملية modulo 26 للحصول على النص المشفر.

ثم تنتقل الصفحة إلى شرح عملية فك التشفير، والتي تعكس العملية السابقة عن طريق طرح قيم كلمة المفتاح من النص المشفر واستعادة النص الأصلي. يتم تقديم أمثلة برمجية توضح كيفية تنفيذ كل من التشفير وفك التشفير في بايثون.

أخيرًا، تختتم الصفحة باختبار عملي للشفرة، حيث يتم تشفير رسالة نموذجية باستخدام كلمة مفتاحية محددة ثم فك تشفيرها للتحقق من دقة الخوارزمية. هذا الاختبار يساعد الطلاب على فهم التطبيق العملي للشفرة وتأكيد صحتها.

📄 النص الكامل للصفحة

plaintext_int = [ord(i) for i in plaintext] ciphertext = "" # Loop over each character in the plaintext for i in range(len(plaintext_int)): # Calculate the new character by adding the ASCII value of the plaintext # character and the corresponding keyword character (modulo 26) value = (plaintext_int[i] + keyword_as_int[i % keyword_length]) % 26 # Convert the new character back to a string and append it to the ciphertext # Adding 65 converts the value to its ASCII representation as an uppercase letter ciphertext += chr(value + 65) return ciphertext --- SECTION: فك تشفير الرسالة (Decrypting the Message) --- فك تشفير الرسالة (Decrypting the Message) def vigenere_decrypt(ciphertext, keyword): # Calculate the length of the keyword keyword_length = len(keyword) # Convert each character in the keyword to its ASCII value keyword_as_int = [ord(i) for i in keyword] # Convert each character in the ciphertext to its ASCII value ciphertext_int = [ord(i) for i in ciphertext] plaintext = "" # Loop over each character in the ciphertext for i in range(len(ciphertext_int)): # Calculate the original character by subtracting the ASCII value of the # corresponding keyword character from the ciphertext character (modulo 26) value = (ciphertext_int[i] - keyword_as_int[i % keyword_length]) % 26 # Convert the original character back to a string and append it to the plaintext # Adding 65 converts the decrypted value back to its ASCII representation as an uppercase letter plaintext += chr(value + 65) return plaintext --- SECTION: اختبار التشفير (Testing the Cipher) --- اختبار التشفير (Testing the Cipher) encrypted_message = vigenere_encrypt("THERE ARE TWENTY THREE ITEMS IN THE INVENTORY", "LEMON") print(encrypted_message) decrypted_message = vigenere_decrypt(encrypted_message, "LEMON") print(decrypted_message) ELQFREEDSGEAQBGJXFVEPIFWGPQEHVYXFVREMZJRYXAFL THERETARETTWENTYTHREEITEMSTINTTHETINVENTORY وزارة التعليم Ministry of Education 2023 - 1447 122 --- VISUAL CONTEXT --- **IMAGE**: Ministry of Education Logo Description: A logo consisting of a stylized green abstract design resembling a plant or a cluster of dots, accompanied by the text 'وزارة التعليم' in Arabic and 'Ministry of Education 2023 - 1447' in English. Context: Identifies the publisher or educational authority of the textbook.

🎴 بطاقات تعليمية للمراجعة

عدد البطاقات: 5 بطاقة لهذه الصفحة

ما هي الخطوات الأساسية في خوارزمية تشفير فيجينير (Vigenere Cipher)؟

الإجابة: 1. حساب طول الكلمة المفتاحية (keyword_length). 2. تحويل كل حرف في الكلمة المفتاحية إلى قيمته ASCII (keyword_as_int). 3. تحويل كل حرف في النص الأصلي إلى قيمته ASCII (plaintext_int). 4. لكل حرف في النص الأصلي، حساب القيمة المشفرة: (قيمة حرف النص الأصلي + قيمة الحرف المقابل من المفتاح) % 26. 5. تحويل القيمة المحسوبة إلى حرف وإضافته إلى النص المشفر.

الشرح: تستخدم خوارزمية فيجينير عملية إزاحة متغيرة لكل حرف بناءً على حرف من كلمة مفتاحية، مما يجعلها أقوى من شيفرة قيصر البسيطة.

تلميح: ركز على العملية الحسابية التي تجمع بين حرف النص الأصلي وحرف المفتاح، وتذكر استخدام عملية modulo.

التصنيف: صيغة/خطوات | المستوى: متوسط

ما هي الخطوات الأساسية في خوارزمية فك تشفير فيجينير (Vigenere Decrypt)؟

الإجابة: 1. حساب طول الكلمة المفتاحية (keyword_length). 2. تحويل كل حرف في الكلمة المفتاحية إلى قيمته ASCII (keyword_as_int). 3. تحويل كل حرف في النص المشفر إلى قيمته ASCII (ciphertext_int). 4. لكل حرف في النص المشفر، حساب القيمة الأصلية: (قيمة حرف النص المشفر - قيمة الحرف المقابل من المفتاح) % 26. 5. تحويل القيمة المحسوبة إلى حرف وإضافته إلى النص الأصلي.

الشرح: لفك تشفير رسالة مشفرة باستخدام فيجينير، يجب استخدام نفس الكلمة المفتاحية وتطبيق العملية العكسية (الطرح) على كل حرف.

تلميح: تذكر أن عملية فك التشفير هي عكس عملية التشفير، حيث يتم الطرح بدلاً من الجمع.

التصنيف: صيغة/خطوات | المستوى: متوسط

ما هو دور عملية modulo 26 في خوارزمية فيجينير؟

الإجابة: تضمن عملية modulo 26 أن القيمة المحسوبة بعد الجمع (في التشفير) أو الطرح (في فك التشفير) تظل ضمن نطاق الحروف الأبجدية الإنجليزية الكبيرة (A-Z)، والتي تمثلها القيم من 0 إلى 25. فهي تعيد القيمة إلى بداية النطاق إذا تجاوزت 25.

الشرح: بدون عملية modulo، قد تنتج القيمة المحسوبة رقماً لا يتوافق مع أي حرف أبجدي، مما يؤدي إلى خطأ. عملية modulo تضمن أن الناتج دائماً بين 0 و 25.

تلميح: فكر في عدد الحروف الأبجدية الإنجليزية وكيفية بقاء الناتج ضمن هذا العدد.

التصنيف: مفهوم جوهري | المستوى: صعب

ما هو الغرض من استخدام الكلمة المفتاحية (keyword) في تشفير فيجينير؟

الإجابة: تحدد الكلمة المفتاحية نمط الإزاحة المتغيرة التي تطبق على كل حرف من أحرف النص الأصلي. كل حرف في الكلمة المفتاحية يحدد مقدار الإزاحة للحرف المقابل في النص، مما يجعل الشيفرة مقاومة لتحليل التكرارات أكثر من الشيفرات ذات الإزاحة الثابتة.

الشرح: استخدام كلمة مفتاحية يجعل كل حرف في النص المشفر يعتمد على حرفين: حرف النص الأصلي وحرف المفتاح، مما يزيد من صعوبة كسر الشيفرة.

تلميح: فكر في كيف أن استخدام كلمة بدلاً من رقم ثابت يجعل التشفير أكثر تعقيداً.

التصنيف: مفهوم جوهري | المستوى: متوسط

لماذا يتم إضافة القيمة 65 إلى المتغير 'value' قبل تحويله إلى حرف في كود Python؟

الإجابة: لأن القيمة المحسوبة من عملية modulo تكون بين 0 و 25، والتي تمثل مواضع الحروف في الأبجدية (A=0, B=1, ... Z=25). القيمة 65 هي القيمة ASCII للحرف 'A' الكبير. بإضافة 65 إلى القيمة المحسوبة، نحصل على القيمة ASCII للحرف الأبجدي الصحيح (65 لـ A، 66 لـ B، وهكذا).

الشرح: هذه الخطوة ضرورية لتحويل الرقم الذي يمثل موضع الحرف (0-25) إلى القيمة الرقمية الصحيحة التي يتعرف عليها الكمبيوتر كحرف أبجدي (A-Z).

تلميح: تذكر أن دالة chr() في Python تحتاج إلى قيمة ASCII لتعيد الحرف المقابل.

التصنيف: تفكير ناقد | المستوى: صعب