موضوع: التشفير بطريقة Vigenere's cipher)) الجمعة 06 نوفمبر 2009, 1:48 am
هذه الطريقة ظهرت في 1586م ,وقد ظهر بدورها لتلغي المعالم الإحصائية لأي لغة حيث وأن عملية الاستبدال فيها للحرف الواحد يمكن أن تأخذ حروف متعددة أي أن الحرف الواحد (R) على سبيل المثال في الكلمة((Remember يمكن أن يستبدل الحرف الأول بحرف ما ويستبدل الحرف الثاني (R) بحرف آخر كما سنرى فيما بعد : وتعتمد هذه الطريقة على الآتي: أ ـ اكتب مصفوفة 26× 26 تمثل الحروف الإنجليزية على النحو :
ب ـ اختار أي مفتاح مناسب .
للقيام بعملية التشفير أتبع ما يلي: 1) اكتب المفتاح المتعارف عليه في سطر وكرره كلما دعة الحاجة (أو كرر جزء منه) . 2) اكتب محتويات الرسالة المراد إرسالها تحت المفتاح (أو تكرار المفتاح ) . 3) اجعل حرف الرسالة المراد إرسالها هو بداية الصف في المصفوفة 26× 26، وجعل ما يقابل هذا الحرف من المفتاح أو تكراره هو العمود المصفوفة( 26× 26). 4) حرف التقاطع بين الصف والعمود في المصفوفة( 26× 26 )هو الحرف الذي سوف نستبدله عن حرف الرسالة وبالتالي هو حرف الشفرة الذي سوف نرسله . مثال :- سوف نوجد الشفرة للرسالة الآتية:- (I hope that you are very well . ) بفرض أن المفتاح المستخدم هو (SALEHNO) أولا: نوجد المفتاح مع تكراره كما يلي(S ALEH NOSA LEH NOS ALEH NOSA) .
KEY= (S ALEH NOSA LEH NOS ALEH NOSA) Plain text= (I HOPE THAT YOU ARE VERY WELL) Ciphertext=(A HZT L GVST JSB NFW VPVF JSDL)
دراسة وتحليل طريقة(Vigenere's cipher)
عند دراسة هذه الشفرة نجد الآتي: أولاً:- عدد حروف الشفرة مساوية لعدد حروف الرسالة الأصلية . ثانياً:- أن حروف الرسالة الأصلية تم استبدالها بحروف أخرى وأن الحرف المتكرر في الرسالة الأصلية تم استبداله بحروف غير متماثلة . فعلى سبيل المثال:- نجد أن الحرف H وجد مرتين في الرسالة، ولقد تم استبداله في الحالة الأولى بالحرف H نفسه، أما في الحالة الثانية فقد تم استبداله إلى الحرف V . وكذلك فقد وجد الحرف T مرتين في الرسالة الأصلية ، وقد تم استبداله في المرة الأولى بالحرف G أما في الحرف الثاني فقد تم استبداله بالحرف T نفسه . أما الحرف E فقد وجد خمس مرات في الرسالة الأصلية وقد تم استبداله كما في الجدول : -
E E E E E S P P W L
وكذلك حرف O , فقد وجد مرتين في الرسالة الأصلية وقد تم استبداله في الحالة الأولى بالحرف Z وفي المرة الثانية بالحرف S . من تتبع استبدال الحروف وجدنا أن بعض الحروف كانت تستبدل بنفسها والسبب في ذلك وجود الحرف A في المفتاح المستخدم، والآن سوف نثبت الرسالة وسوف تغير المفتاح المستخدم فقط ونظر ماذا يحدث: نفرض أن المفتاح هو(SLEHNOM) يكون المفتاح المولد هو : S LEHN OMSL EHN OMS KEHN OMSL)) نكرر المفتاح ليصبح بطول النص المرد تشفيره النص الأصلي (Plain text) : (I HOPE THAT YOU ARE VERY WEEL) النص المشفر (Ciphertext): (A SSWR HTSE CVH ODW GIYL KQDW) فإذا تابعنا نفس الحروف الأولى فنجد أن الحرف H وجد مرتين وتم استبداله بالحالة الأولى بالحرف S وبالحالة الثانية بالحرف T وكذلك الحرف T وجد مرتين أيضاً وقد تم استبداله بالمرة الأولى بالحرف H وبالمرة الثانية بالحرف E . أما الحرف E فقد وجد خمس مرات وتم استبداله على النحو التالي: E E E E E D Q I W R أما الحرف O , فقد وجد مرتين وتم استبداله بالمرة الأولى بالحرف S وبالمرة الثانية بالحرف V . عند استخدام مفتاح خال من الحرف A تكون الشفرة أكثر حصانه ، وذلك لأن تقاطع الحرف A مع أي حرف آخر فإن نتيجة التقاطع هو ذلك الحرف الآخر، وهذا جعل بعض لحروف في الرسالة هي نفس الحروف بالشفرة كما في الحالة السابقة . أما في هذه الحالة، فلم نجد أن أحد الحروف بالشفرة هو نفسه بالرسالة . فإذا درسنا الشفرة بنوع من التروي نجد أن أكثر الحروف تكراراً الحرف W . وإذا استبدلنا هذا الحرف بالحرف E الذي يعتبر أكثر الحرف تكراراً باللغة الإنجليزية لم نصل إلى حل لأن الحرف هو في الحقيقة عبارة عن شفرة للحروف التالية: L, E, P . وكذلك نجد في المقام الثاني الحرف S وإذا استبدلناه عن الحرف T الذي يأتي بالمقام الثاني من تكرار الحروف باللغة الإنجليزية، لم نصل إلى حل أيضاً لأن في الحقيقة الحرف S هو عبارة عن استبدال للحروف A,O,,H من هذه الدراسة نجد أن هذه لطريقة(Vigenere's cipher) تبدد الخواص الإحصائية للغة المستخدمة وبالتالي فهي أقوى من (Caesar cipher) .
طريقه فك تشفر طريقة (Vigenere's cipher) :- عند استقبال الشفرة يتم وضعها تحت المفتاح أو تكرارها ثم يتم أخذ أحد حروف المفتاح ويكون الحرف من المفتاح هو الصف المطلوب في المصفوفة والحرف من الشفرة هو العمود من المصفوفة ويكون أعلى العمود هو أحد حروف الرسالة الأصلية(plaintext).ويتم تكرار هذه العملية في كل حروف الشفرة ونستطيع فك شفرة من اجل أيجاد الرسالة الأصلية لمستخدم (Vigenere's Cipher) .
خوارزمية التشفير وفك التشفير بالفيجول بيسك :
الكود:
Public Function EncodeVigenere(ByVal PlainIn As String, ByVal key As String) As String Dim i As Long Dim Cin As Integer Dim Ckey As Integer Dim Cout As Integer Dim Keypos As Integer key = TrimText(key, True, False, False, False) If Len(key) < 2 Then MsgBox "Key size too small", vbCritical Exit Function End If PlainIn = TrimText(PlainIn, True, False, False, False) If PlainIn = "" Then Exit Function Keypos = 1 For i = 1 To Len(PlainIn) Cin = Asc(Mid(PlainIn, i, 1)) - 64 Ckey = Asc(Mid(key, Keypos, 1)) - 64 Cout = Cin + (Ckey - 1) If Cout > 26 Then Cout = Cout - 26 EncodeVigenere = EncodeVigenere & Chr(Cout + 64) Keypos = Keypos + 1: If Keypos > Len(key) Then Keypos = 1 Next i End Function Public Function DecodeVigenere(ByVal PlainIn As String, ByVal key As String) Dim i As Long Dim Cin As Integer Dim Ckey As Integer Dim Cout As Integer Dim Keypos As Integer key = TrimText(key, True, False, False, False) If Len(key) < 2 Then MsgBox "Key size too small", vbCritical Exit Function End If PlainIn = TrimText(PlainIn, True, False, False, False) If PlainIn = "" Then Exit Function Keypos = 1 For i = 1 To Len(PlainIn) Cin = Asc(Mid(PlainIn, i, 1)) - 64 Ckey = Asc(Mid(key, Keypos, 1)) - 64 Cout = Cin - (Ckey - 1) If Cout < 1 Then Cout = Cout + 26 DecodeVigenere = DecodeVigenere & Chr(Cout + 64) Keypos = Keypos + 1: If Keypos > Len(key) Then Keypos = 1 Next i End Function Public Function TrimText(TextIn As String, Letters As Boolean, Numbers As Boolean, Spaces As Boolean, Points As Boolean) Dim i As Long Dim tmp As Byte For i = 1 To Len(TextIn) tmp = Asc(UCase(Mid(TextIn, i, 1))) If Letters = True And (tmp > 64 And tmp < 123) Then TrimText = TrimText & Chr(tmp) ElseIf Numbers = True And (tmp > 47 And tmp < 58) Then TrimText = TrimText & Chr(tmp) ElseIf Spaces = True And tmp = 32 Then TrimText = TrimText & Chr(tmp) ElseIf Points = True And tmp = 46 Then TrimText = TrimText & Chr(tmp) End If Next End Function
توقيــع العضو فيــرو
موضوع: رد: التشفير بطريقة Vigenere's cipher)) الأربعاء 11 نوفمبر 2009, 6:19 pm
شكرا للمعلومة القيمة يا مبدع
توقيــع العضو Rasti
موضوع: رد: التشفير بطريقة Vigenere's cipher)) الخميس 24 يونيو 2010, 12:12 am