U3F1ZWV6ZTExODI2MjMyOTc4OTg1X0ZyZWU3NDYxMDEwMzg3NTA5

خــوارزمية القيصر للتشفير

 

 مــــقدمة خوارزمية القيصر للتشفير


شفرة قيصر تعتبر في علم التعمية التقليدي (بالإنجليزية: classic cryptography)‏ هي وسيلة لتشفير النصوص، هذه الشفرة شاع استخدامها قديما ويُعتقد أن يوليوس قيصر كان أول من استخدم هذه الوسيلة وكان ذلك بين 58 ق.[1][2][3]م حتى 51 ق.م، وخوارزمية التشفير كانت جدا بسيطة إذ انه كان يبدل الحرف المُراد تشفيره بالحرف الثالث الذي يليه، أي لو أراد تشفير حرف «ا» كان يكتب مكانه حرف «ث» وهكذا. عندما اخذ زمام الأمور اغسطس كانت الإزاحة مقدار حرفين فقط !

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

 


قبل البدأ بتــعريف عملية التشفير – نبدأ بالمصطلحات الأساسية

1– الــنص المراد تــشفيره سنرمز بــإسم text

2- النص بعد التشفير سنرمز له بــإسم  result

3-  وعادة ما يُستخدم في التشفير مفتاح سري والذي يعرفه فقط باعث الرسالة ومتلقيها ونرمز له عادة بالحرف k .



عملية التشفير وفكه


عملية الــتشفير هي دالة نرمز لها بــإسم encrypt ,  هذه الدالة تستقبل النص المراد تشفيره والذي أطلقنا عــليه بــإسم text  , وأيضا تستقبل مفتاح التشفير والذي أطلقنا عــليه بـإسم k مبدئين النص المراد تشفيره هو "Hello World“text= , وقيمة مفتاح التشفير ستكون k=4


الان نــأتي على طريقة تــشفير النص 
أولاً : قم بــكتابة الحروف الإنكليزية من (A,Z)  , ثم قم بــتعداد الحروف من (0,25) , الــتعداد يــُسمى Index -  ,  كمـا مــوضح في الصورة التــالية.





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



سنحتاج إلى حلقة تكرارية من نوع for loop  هذه الحلقة سنستخدمها للدوران على النص المراد تشفيره وكما هو موضح بالصورة التالية .




العملية الرياضية التي سنستخدمها في التشفير هي تسمى : تبديل مكان الحرف بــمقدار أو بعدد مفتاح التشفير ! الان مفتاح التشفير هو قيمته 4 إذن اولاً يجب علينا أن نــجد مكان كل حرف راجع من الحلقة التكرارية يجب أن نجد الإنديكس الخاص به .؟ أين نجد الإنديكس , ببساطة سنجده في الحروف الإنكليزية؟ للتوضيح أكثر أنضر إلى الصورة التالية.



الان نبدأ في خطوات التشفير : السلسة المراد تشفيرها هي : “”Hello الان أول حرف يتم إرجاعه من الحلقة التكرارية هو الحرف H الحرف H  الإنديكس الخاص به في ترتيب الحروف الإنجليزية هو 7  وكما هو واضح في الصورة 




إذن عملية التشفير ستكون كالتالي : (4+7) الرقم 7  هو مكان الحرف H والرقم 4  هو قيمة مفتاح التشفير  

الناتج سيكون (7+4) = 11  هذا الناتج في تعداد الحروف الإنجليزية يُــمثل  الحرف    L
إذن استطعنا استبدال الحرف H  بالحرف L , الان تم تشفير حرف ال H
سنستخدم هذه العملية على كل حرف راجع من الحلقة التكرارية



الان سنشفر الحرف , مكان الحرف  H في تعداد حروف اللغة الإنكليزية هو  7  إذن عملية التشفير ستكون كالتالي :
(7+4)  = الناتج سيكون 11 , هذا الناتج 11 يُــمثل الحرف l في تعداد الحروف الإنكليزية بهذه الحالة التشفير الخاص بالحرف H هو الحرف L  


الدورة الأولى من الحلقة التكرارية : سيتم تشفير الحرف " H" ---- إلى الحرف (l)
الدورة الثانية من الحلقة التكرارية : سيتم تشفير الحرف "  E" ----  إلى الحرف (i)
الدورة الثالثة من الحلقة التكرارية : سيتم تشفير الحرف "  L" ---- إلى الحرف (P)
الدورة الرابعة من الحلقة التكرارية : سيتم تشفير الحرف "  L" ---- إلى الحرف (P)
الدورة الخامسة من الحلقة التكرارية : سيتم تشفير الحرف "  O" ---- إلى الحرف (S)

الدورة الثانية من الحلقة التكرارية : سيتم تشفير الحرف "  E" ---- إلى الحرف  (i)
الدورة الثالثة من الحلقة التكرارية : سيتم تشفير الحرف "  L" ---- إلى الحرف  (P)
الدورة الرابعة من الحلقة التكرارية : سيتم تشفير الحرف "  L" ---- إلى الحرف  (P)
الدورة الخامسة من الحلقة التكرارية : سيتم تشفير الحرف  " O" ---- إلى الحرف  (S)
ناتج تشفير كلمة “Hello” سيُصبح عبارة عن كلمة  ---    lipps  



ملاحظة مهمة جداً : لو فرضنا أن الحرف الراجع من الحلقة التكرارية هو “”W الإندكس الخاص بهذا الحرف هو 22  بمعنى أن مكان هذا الحرف في تعداد الحروف الإنجليزية هو 22  ونحن لدينا مفتاح تشفير يمتلك قيمة 4  طيب , إذا قلنا   (4+22)=26 

بهذه الحالة ســيحدث خطأ!! وبالتالي يسبب فشل الخوارزمية , !!



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




إذن ماهو الحل ؟ , الحل ببساطة يجب أن نكتب شرط هذا الشرط يتحقق من عملية التشفييت! يعني عملية تشفيت الحرف 
إذا كان ناتج عملية تشفيت الحرف أكبر من طول الحروف الإنجليزية , بهذه الحالة خطأ! لأنه ليس هناك حرف حتى يتم تشفيره بالحرف الحالي
هنا إذا تحقق هذا الشرط ماذا سنفعل ؟ , ببساطة سنقوم بإنقاص قيمة التفشير ناقص طول الحروف الإنجليزية
يعني إذا كان اول حرف في السلسلة النصية هو w الإنديكس الخاص بهذا الحرف هو 22 إذن 25-22 الناتج سيكون 3
هذا الرقم 3 يمثل الحرف D بالتالي سيتم تشفير الحرف w  بالحرف   D  

هذا هو الشرط كما هو موضح في الصورة





وأخيرا سنقوم بتحويل أرقام التشفير إلى حروف  حتى نقوم بجمعهم مع بعض وتكون لدينا جملة نصية مشفرة كما هو واضح في الصورة التالية : توضح كيفية تحويل الأرقام إلى حروف بإستخدام الدالة chr



هنا قمنا بإستدعاء المتغير result حتى نقوم بجمع حروف الجملة المشفرة الجديد



الــكود كاملاً












تعليقات
ليست هناك تعليقات
إرسال تعليق

إرسال تعليق

الاسمبريد إلكترونيرسالة