شيفرة قيصر باستخدام بايثون
بسم الله الرحمن الرحيم
أعزائي متابعي الموقع
السلام عليكم ورحمة الله وبركاته
غريزة الإنسان بإخفاء الأشياء دعته إلى إكتشاف التشفير او ما يسمى بالتعمية وهو علم نشأ منذ قديم الأزل وأصبح اليوم أحد أهم عناصر أمن المعلومات إذ أصبحت التقنيات الحديثة والمبهرة تعتمد عليه مثل تقنية البلوكشين والعملات الرقمية .
===============
شيفرة قيصر تعتبر هذه الشيفرة احد اقدم انواع الشفرات وهي شيفرة كلاسيكة يقال انه يوليوس القيصر كان أول من استخدمها .تركز هذه الشيفرة على تبديل الأحرف بناء على خوارزمية محددة وهي شيفرة سهلة التشفير وايضَا يمكن فك شفرتها بسهولة بحيث عدد المحاولات بها لايتجاوز ال 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