الخميس , أبريل 2 2020
شيفرة قيصر باستخدام بايثون
شيفرة قيصر باستخدام بايثون

شيفرة قيصر باستخدام بايثون

بسم الله الرحمن الرحيم

أعزائي متابعي الموقع

السلام عليكم ورحمة الله وبركاته

 

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

 

===============

شيفرة قيصر تعتبر هذه الشيفرة احد اقدم انواع الشفرات وهي شيفرة كلاسيكة يقال انه يوليوس القيصر كان أول من استخدمها .تركز هذه الشيفرة على تبديل الأحرف بناء على خوارزمية محددة  وهي شيفرة سهلة التشفير وايضَا يمكن فك شفرتها بسهولة بحيث عدد المحاولات بها لايتجاوز ال 26 محاولة ولا تستخدم الآن إلا كطريقة تعليمية ومدخل إلى علم  التشفير لفهمه وفي هذا المقال سنقوم بالتحديد فهم هذه الشيفرة وبنائها باستخدام لغة البرمجة بايثون

 

 

اولًا : عمل شيفرة قيصر يدويًا

كما قلنا سابقًا شيفرة قيصر تعتمد على تبديل الحروف بناء على  خوارزمية محددة وهي :

x = m + k (mod 26)

حيث أن :

x  ⇒ النص المشفر

m ⇒ خانة النص الأصلي

k ⇒ هو المفتاح الذي يتم بناء عليه الطريقة قيصر

mod 26 ⇒ يعني باقي القسمة على 26

ملاحظات :

  • يمثل العدد 26 عدد الاحرف الانجليزية
  • في باقي القسمة mod 26 إن كل رقم اقل من 26 يعطي نفسه  بينما الأكبر الفرق يعطي 26 او مضاعفتها

15 mod 26 = 15 ,

28 mod 26 = 2

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

 

مثال :

لو اردنا تشفير الكلمة التالية :

mhpssl

 

 

1. نكتب جميع الاحرف الابجدية الانجليزية  نعطي الأحرف من 0 إلى 25

جدول كالتالي :

 

L K J I H G F E D C B A الحرف
11 10 9 8 7 6 5 4 3 2 1 0 الخانة

 

X W V U T S R Q P O N M الحرف
23 22 21 20 19 18 17 16 15 14 13 12 الخانة

 

                        Z Y الحرف
                        25 24 الخانة

 

2. نختار مفتاح لنفترض

key = 3

3. نختار اول حرف في كلمتنا وهي M نحدد خانتها  وهي  12ونقوم بحل المعادلة

x = m + k (mod 26)

x = 12 + 3 (mod 26)

x = 15 mod 26

x = 15

أي العنصر الذي خانته 15 وهو p

وهكذا مع كل حرف نقوم بعمل المعادلة السابقة إلى أن نحصل على هذه الكلمة pskvvo

 

تهانينا قمت الآن بالتشفير بنجاح 🥳🥳🥳

 

============

ثانيًا : شيفرة قيصر باستخدام بايثون

 

 

 

والآن : دعونا نقوم بشرح السكربت السابق

  • قمنا باستدعاء ascii_lowercase من مكتبة string للحصول على الحروف الأبجدية من a-z

ملاحظة : يمكن الاستغناء عن الاستدعاء بكتابة الاحرف كاملة هكذا  ⇒ ‘abcdefghijklmnopqrstuvwxyz’

from string import ascii_lowercase

  • قمنا بإنشاء دالة حيث أن هذه الدالة تستقبل معاملين : string, key النص الأصلي وايضَا مفتاح التشفير

def caser_encode(string,key):

  • قمنا بالتأكد أن السلسة  النصية المدخلة لا تحتوي على أحرف كبيرة

encrypt_txt = encrypt_txt.lower()

 

  • قمنا بالتأكد من خلو السلسلة النصية من أية مسافات

encrypt_txt = encrypt_txt.replace(‘ ‘,)

 

  • قمنا بإنشاء قائمة فارغة لنقوم بوضع الأحرف المشفرة فيها كل مرة نقوم بالتكرار

x = []

  • قمنا بعمل تكرار بحيث اننا سنقوم ببناء الخوارزمية مرة واحدة و نمرر تلك الخوارزمية بشكل أوتوماتيكي إلى كل احرف السلسة النصية ونضيفها إلى القائمة المعرفة مسبقًا

for i in encrypt_txt:

  • وهنا قمنا ببدأ الخوارزمية بداية حددنا m  وهي الخانة كما تعرفنا عليها مسبقًا وتعني خانة الحرف وموقعه قمنا بتحديده باستخدام دالة find وهي دالة مبنية في بايثون تعيد لي خانة الحرف بناء على ascii_lowercase وهي الأحرف الأبجدية من a إلى z حيث أن الفهرسة في بايثون تبدأ من 0 كما في شيفرتنا تمامًا

m = ascii_lowercase.find(i)

  • قمنا هنا تحديد الخوارزمية المستخدمة والتي تنص على جمع رقم خانة الحرف مع المفتاح وإيجاد باقي قسمة العدد

alogra = (m + key) % 26

  • بعد إيجاد رقم خانة الحرف المشفر قمنا باستخراج الحرف  عن طريق  ascii_lowercase من خلال الفهرسة في بايثون

x_letter = ascii_lowercase[alogra]

  • وقبل الانتهاء من التكرار قمنا بإضافة الحرف المشفر إلى القائمة الجديدة التي تم تعريفها مسبقًا وسيتم التكرار الى ان يتم اضافة اخر حرف مشفر بالسلسلة

x.append(x_letter)

  • واخيرًا بعد الحصول على قائمة بها الاحرف المشفرة قمنا بتحويل القائمة إلى سلسلة نصية وإعادة الكلمة المشفرة

return .join(x)

 

وفي النهاية بعد بناء الدالة نقوم باستدعائه بإضافة النص الأصلي كمعامل وايضًا مفتاح التشفير

print(caser_encode(‘mphssl’,3))

 

============

ثالثًا : فك شيفرة قيصر باستخدام بايثون

 

 

 

 

 

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

alogra = (m – key) % 26

 

وبذلك انتهينا

إن علم التشفير علم ممتع جدًا ويستحق التجربة

كونوا بخير دومًا

=====================

السكربتات :

 

التشفير

from string import ascii_lowercase

def caser_encode(plain_txt,key):

plain_txt = plain_txt.lower()

plain_txt = plain_txt.replace(‘ ‘,”)

x = []

for i in plain_txt:

m = ascii_lowercase.find(i)

alogra = (m + key) % 26

x_letter = ascii_lowercase[alogra]

x.append(x_letter)

return ”.join(x)

print(caser_encode(‘mphssl’,3))

فك التشفير

from string import ascii_lowercase

def caser_decode(encrypt_txt,key):

encrypt_txt = encrypt_txt.lower()

encrypt_txt = encrypt_txt.replace(‘ ‘,”)

x = []

for i in encrypt_txt:

m = ascii_lowercase.find(i)

alogra = (m – key) % 26

x_letter = ascii_lowercase[alogra]

x.append(x_letter)

return ”.join(x)

print(caser_decode(‘pskvvo’,3))

 تابعنا على مواقع التوآصل الإجتماعي :-

Twitter : MHPSSL

Snapchat : mhpssl

Telegram Channel : MHPSSL_Channel

Telegram Kali Linux Group: KaliArabi

Google Play App: MHPSSL

 

 

 

 

شارك هذه المقالة عبر مختلف وسائل التواصل الاجتماعي بالأسفل

عن م . مهند

‏‏‏‏‏‏‏‏مهندس : شبكات حاسب 🌐 | مهتم بأمن المعلومات 🚫 | مُختبر إختراق 💻 | مبرمج هاوي بلغة Python 🐍 | أؤمن بأنه لايوجد هنالك شيئ مستحيل فقط إبدأ ▶️ .

تعليق واحد

  1. غير معروف

    كان ذلك ممتعا يستحق التجريب
    شكرا مهندسنا ننتظر مقالك القادم
    دمت بخير

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني.