صباح الخير
ماذا يعني التشفير Encryption ؟
بأختصار شديد ان التشفير او التعمية هو احد الطرق المستخدمة في امنية المعلومات المرسلة والمستلمة ويتم عن طريق تغيير محتوى الرسالة الاصلي ويكون هذا التغير على انواع متعددة اذكر منها الابدالية ( مثل شفرة القيصر والشفرة الماسونية ) و الانتقالية (rail fence, columnar) التابعتان للتشفير التقليدي
اما فك التشفير Decryption : فهو عكس التشفير ( لكن انتبه على قضية مهمة , ان الشخص الذي يقوم بفك الشفرة هو شخص مخول بذلك وليس هاكر او متطفل )
تتم عمليتي التشفير وفك التشفير بأستخدام مفتاح يتفق عليها من قبل الطرفين ( المشفر و مفكك الشيفرة )
اغلب كتب التشفير والمصادر يتفقون على تسمية المشفّر بـ Alice ومفكك الشفرة بـ Bob و كاسر الشفرة بـ Eve كما في الصورة ادناه :
مصطلحات مهمة :
علم التشفير : cryptography
علم تحليل الشيفرات : cryptanalysis
المشفرين : cryptographers ( مثل alice )
كاسروا الشيفرات : cryptanalysts ( مثل Eve )
النص الواضح : plain text
النص المشفر : Cipher text
المفتاح : key
اكتفي بهذا الجزء النظري لاني اريد ان اخصص اغلب هذا الموضوع للجانب البرمجي .
برمجة شفرة قيصر Caeser cipher :
سميت بهذا الاسم نسبة الى القائد الروماني يولسيس قيصر ( 59 قبل الميلاد ) , فقد كان يقوم بأرسال الرسائل الى قادة الجيوش بصورة مشفرة و ان اعدائها اميّين وليس لديهم اي معرفة بعلم التشفير لذلك كانوا غير قادرين على قرأءة الرسالة حتى وان وقعت بين ايديهم
طريقة التشفير :
تتلخص هذه الطريقة بتزحيف كل حرف في الرسالة ثلاث مراتب ( حسب الابجدية ) مثلا اذا وجد الحرف (a) فسوف يقوم بأستبداله بالحرف (d)
واذا جاء الحرف (l) مثلا يقوم بأستبداله بالحرف (o) وهكذا , لو اردنا تشفير كلمة (ali) فسوف تصبح (DOL) .
هناك مشكلة بسيطة ,, ما العمل اذا جاء في الرسالة المراد تشفيرها حرف (z) وكما تعرفون ان ال z هو اخر حرف ولا يمكن تزحيفه ثلاث مرات !
لحل هذه المشكلة نستخدم دالة باقي القسمة Mod لاعطاء موقع مناسب للحرف الذي يجتاز عدد مراتب الابجدية بعد التزحيف , مثال للتوضيح :
تسلسل الحرف z في الابجدية هو 26 فاذا اردنا تشفيره يجب ان نزيده ثلاث مراتب فيصبح 29 ولا يوجد حرف بالابجدية تسلسله 29 لذلك نستخدم دالة باقي القسمة ليصبح العدد 3 وهو الحرف C
كود PHP:
Z = (26 + 3) = 29
z mod 26 = 3
وهو الحرف C
الان سوف اضع بين ايديكم البرنامج بلغة vb6 واي استفسار عن الكود المصدري انا حاضر
1- اضف اثنين من ازرار الامر ( الاول للتشفير والثاني لفك التشفير )
2- اضف ثلاث صناديق نصوص ( الاول للنص الواضح و الثاني للمشفر والثالث للمفتاح )
3- قم بتغير خاصية text لصندوق النص الثالث الى الرقم 3
الان انقر نقرة مزدوجة على زر الامر الاول واكتب الكود :
كود PHP:
alpha = Array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "a", "b", "c")
t1 = Text1.Text
t2 = Text2.Text
t3 = Text3.Text
For i = 1 To Len(t1)
cut = Mid(t1, i, 1)
For j = 0 To 25
If (j > Val(t3)) Then
If (cut = alpha(j)) Then
x = (j - Val(t3)) Mod 26
Text2.Text = Text2.Text & alpha(x)
End If
Else
If (cut = alpha(j)) Then
x = (j - Val(t3))
d = x - ((-1) * 26)
Text2.Text = UCase(Text2.Text & alpha(d))
End If
End If
Next j
Next i
الان انقر نقرة مزدوجة على زر الامر الثاني واكتب الكود :
كود PHP:
alpha = Array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "a", "b", "c")
t1 = Text1.Text
t2 = Text2.Text
t3 = Text3.Text
For i = 1 To Len(t1)
cut = Mid(t1, i, 1)
For j = 0 To 25
If (j > Val(t3)) Then
If (cut = alpha(j)) Then
x = (j - Val(t3)) Mod 26
Text2.Text = Text2.Text & alpha(x)
End If
Else
If (cut = alpha(j)) Then
x = (j - Val(t3))
d = x - ((-1) * 26)
Text2.Text = UCase(Text2.Text & alpha(d))
End If
End If
Next j
Next i
يمكنك تحميل البرنامج كاملا بالنقر هنا
اتمنى لكم الفائدة و اي استفسار انا موجود