التشفير الحديث و نظام الاسكي 7 ASCII وبوابة XOR المنطقية :-
كما تلاحظ من المخطط اعلاه ان علم التشفير ينقسم الى فرعين رئيسين وهما التشفير القديم و التشفير الجديد , والحمد لله اكملنا التشفير القديم بجميع فروعه , اما التشفير الحديث يقسم الى فرعين ايضاَ :
- انظمة المفتاح المعلن public key
- انظمة المفتاح الخاص private key والذي بدوره يشمل التشفير الكتلي Block cipher و التشفير الانسيابي Stream cipher
التشفير الانسيابي Stream Cipher :
هذا النوع يختلف عن كل الشفرات التي تعلمناها في الدروس السابقة , لان هذا التشفير لا يمكن تشفيرها يدوياً مثل شفرة قيصر وافاين والبليفير وغيرها من الشفرات , لانه يتعامل مع ما تتعامل به لغة الالة machine language التي تتعامل مع الاصفار و الواحدات (النظام الثنائي Binary system ) , وكذلك يختلف عن التشفير التقليدي الكلاسيكي بأن التشفير الحديث يستطيع تشفير كل شيء حتى الفراغات والارقام والرموز الخاصة اما التشفير التقليدي يشفر الابجدية فقط وبدون فراغات وهذه احد اكبر عيوب التشفير التقليدي .
اساسيات التشفير الانسيابي :
- طريقة توليد الاعداد العشوائية وشبه العشوائية
تعتمد طريقة التشفير الانسيابي على المفتاح الانسيابي الذي يتم توليده عن طريق احد طرق توليد الارقام العشوائية او شبه العشوائية
من طرق توليد الارقام العشوائية :
- true random number generator (TRNG )
- Pseudorandom number generator (PRNG)
- pseudo random number generator (CSPRNG)
عملية توليد الاعداد العشوائية طريقة احصائية بحتة وبالحقيقة لا توجد طريقة لتوليد الاعداد العشوائية والذي نولده هي اعداد شبه عشوائية , لان الاعداد العشوائية تخضع لشروط معقدة ولا افضل الدخول في هذا الموضوع لانه يميل للاحصاء اكثر من الحاسوب .
ولا تتصور كلمة عشوائية هنا نقصد به عدم الانتظام .
ماهو نظام الاسكي 7 ASCII :
هو نظام ترميز مبني على الاحرف اللاتينة , ويقوم بأعطاء كل حرف (او رمز) رقماً صحيحاً ثابت لكل حرف , ادناه نظام الاسكي للاحرف :
كما تلاحظ من الجدول اعلاه فأن الحرف a = 97 , A = 65 وهكذا (طبعا انت ما مجبور تحفظ الاسكي لان رح نبرمجه ونخلي اللغة هي تتكفل بالتحويل الكامل ) .
بوابة XOR المنطقية :
بوابة منطقية تقوم بأستقبال مدخلين a,b وتخرج c . اذا كان a,b متشابهين يكون الناتج 0 واذا كانا مختلفين يكون الناتج واحد |
جدول الحقيقة لبوابة الاختيار الحصري XOR |
نستخدم بوابة xor لانها حيادية من ناحية اختيار الواحدات والاصفار
الان بعد ان عرفنا التشفير الحديث ونظام الاسكي وبوابة الـ XOR سنقوم بتجميع المعلومات سوياً ونقوم بالتشفير .
عملية التشفير Encryption :(طبق الاصل مع عملية فك التشفير )
بعد توليد مفتاح انسيابي , نقوم بتحويل احرف النص الصريح plain text الى نظام الاسكي 7 وبعد ذلك نحول قيم ارقام الاسكي 7 الى النظام الثنائي وبعد ذلك نعمل للناتج XOR مع المفتاح الانسيابي .مثال :
قم بتشفير الكلمة التالية : spyman اذا علمت ان المفتاح هو 1000001
فيكون ناتج التشفير
011001001100010111000010110001000000101111
تشفير اسم سوزان
001001001101000111011010000001011110100000
زيتو
0111011010010001101010101110
هاني
0101001010000001011110101000
روز
0110011010111001100100100100
تشفير اسماء باللغة العربية :
العراقية العبيدية
00110110010000000011000111110101100000100011000010 01101100010010101100000111001011000001000
رجل كهل :
0010000000110101000001100001001111001001000100000
زهر الربى
00100110100100001000011000010000110010000000100000 0010010101101
اغرد بهمس
00001100011010001000000011101100001000100101001000 10001000100101100001
هذه اللغة الوحيدة التي تعرفها الآلة , وتسمى لغة الالة machine language
برمجة الشفرة بلغة VB6 :
اضف اربع صناديق نصوص وزر امر واحد
كود البرنامج كاملاً مع الدوال المستخدمة في التحويل للباينري و دالة مساواة طول المفتاح مع رمز الاسكي
كود PHP:
Private Sub Command1_Click()
key = Text3.Text
x = Text1.Text
For i = 1 To Len(x)
cut = Mid(x, i, 1)
dec = DecToBin(Asc(cut), 7)
Text2.Text = Text2.Text & dec
Next i
Call streamkey(key)
For i = 1 To Len(Text2.Text)
cut = Mid$(Text2.Text, i, 1)
cut2 = Mid$(Text3.Text, i, 1)
rus = cut Xor cut2
Text4.Text = Text4.Text & rus
Next i
Label5.Caption = Len(Text3.Text)
Label6.Caption = Len(Text2.Text)
Label7.Caption = Len(Text4.Text)
End Sub
Private Sub streamkey(key)
For i = 1 To Abs(Len(Text2.Text) - Len(key))
c = Mid(key, i, 1)
If (Len(key) <= Len(Text2.Text)) Then
key = key & c
End If
Next i
If (Len(key) > Len(Text2.Text)) Then
key = Mid(key, i, Len(Text2.Text))
End If
Text3.Text = key
End Sub
Public Function DecToBin(DeciValue As Long, Optional NoOfBits As Integer = 7) _
As String
Dim i As Integer
For i = 0 To (NoOfBits - 1)
DecToBin = CStr((DeciValue And 2 ^ i) / 2 ^ i) & DecToBin
Next i
End Function
Private Sub Form_click()
Text2.Text = ""
Text3.Text = ""
Text4.Text = ""
End Sub
اضغط هنا لتحميل البرنامج كاملا