• 0
حسين احمد طالب

تشفير بخوارزميات MD5,SHA بلغة VB.net

سؤال

التشفير في بيئة VB.NET


في بيئة VB.NET جميع خوارزميات التشفير تقع ضمن هذه المكتبة . لذالك بكل سهولة نكون كائن جديد من نوع خوارزمية تشفير معينة ونجد التشفير لأي بيانات نريدها

 

VB.NET CODEImports System.Security.Cryptography

 


هذه جزء من خوارزميات الموجودة ضمن هذه المكتبة

 

md51.png

 

 

 

Hash And MAC

هي خوارزميات يتأكد المستلم ان الرسالة المرسلة إليه لم يتم التلاعب بهَ خلال فترة انتقالها إليه من المرسل  أي التأكد من مصداقية وصول البيانات .اي يرسل رسالة وعند المستلم يتأكد ان الرسالة المستلمة هي نفسها الرسالة المرسلة ! إذن هي ليست خوارزميات تشفير إنما خوارزميات تأكد سلامة وصول بيانات لذالك ليس لها طرق فك تشفير تستخدم في كلمات مرور الحواسيب وفي ملفات التورنت للتأكد من وصول الملفات كاملة لأنه مثلا عند تنزيل أي ملف من الانترنت أي خلل في تنزيل ملف لا يعمل عند المستلم لذالك يجب ان يقوم الخادم باستخراج Hash من الملف وإرساله مع الملف والشخص الذي يحمل الملف عندما يكتمل تحميله يستخرج Hash للملف ويقارنه مع المرسل من قبل الخادم فإذا كان نفسه فالملف سليم وإلا الملف تالف .

 

pp5.png

 

 

تصل الحرب عند مرحلة انه لا يريد يقطع إرسال الرسالة أو انه حتى إذا قراها وفك شفرتها  فلن يغير شيء من مسار العملية المطلوب تنفيذها  فيحاول أن يغير مسار العملية المراد تنفيذها بتوصيل الرسالة للمستلم لكن بصيغة جديدة  أو انه يعرف أن توصيل الرسالة مع إجراء بعض التغيرات عليها أفضل من قطعها فيعترض الرسالة ويغير عليها ويرسلها فلمستلم يستلم رسالة متغيرة وينفذها
فقد ينفذ العمليات التالية
1.    أما انه يعدل على الرسالة
2.    او يؤثر على ترتيب البيانات أما يحذف او يضيف او يعيد ترتيب
3.    او يؤخر او يعيد إرسال الرسالة

مثال : رسالة إلى محمد (اذهب  اقتل احمد) معترض يعرف ان محمد سوف  يقتل احمد وهو لا يستطيع ان  يوقف مسار العملية أي لا يستطيع ان يمنعه من قتله لأنه مثلا في مكان بعيد عن القاتل  لا يستطيع ان يصل إليه لذالك سوف يغير الرسالة ويجعلها  (اذهب اقتل صالح) فلن يقتل  احمد قتل  صالح ونفذ ضربة المعترض ونجا الهدف ؟

•    هذه العمليات التعديل على البيانات تحدث بسهولة في البث الجماعي Broadcast يعني سهولة شخص واحد يستلم رسالة ويعيد  يبثها للجميع بصيغة ثانية فيغير العمل عليهم

 

 

خوارزمية MD5


هي إحدى خوارزميات Hash  تكون  من الرسالة المتغيرة التي نحن نريد إرسالها  مفتاح تابت
 طوله 128 bit (16 byte  )  كما في الشكل

ppp.png

 خطوات العمل مع خوارزمية MD5
1.    في شكل (1) جزء رقم (1) تقسم البيانات على شكل Block كل واحد حجمه 512bit  حيث L  يمثل عدد Block  كما في الشكل بالأسفل مقسم  إلى ثلاثة مقاطع  حيث
•    الجزء الأول message يمثل بيانات الرسالة بعد تحويلها الى النظام الثنائي
•    والجزء الثاني padding وضيفته إذا لم تكفي  bitsالخاص بالرسالة لي Block   وتبقى بعض bits  ضمن 512 bit داخل احد Block   فارغة
تملئ  bits فارغة بواحد (1) ويليه أصفار بقدر bits الفارغة ؟
في Block الأخير نستخدم فقط bit   448  ويبقى bit    64   الأخير لخزن طول الرسالة أي لخزن عدد bits الخاص بالرسالة داخل اخر 64 bit .
لحساب عدد bits الواجب إضافتها الى الرسالة نستخدم المعادلة التالية
A       = عدد bits رسالة حقيقية / 512
     B =الجزء ألكسري (A)*512
     bits مضافة=448-  B
•    الجزء الثالث message Length يمثل طول bits الرسالة الحقيقية ونحن هنا حجز لها 64 bit من اخر Block في الرسالة لنخزن فيه طول الرسالة .إذا   كانت البيانات عبارة عن Block  واحد تخزن طول البيانات في 64 bit  الأخير أما إذا كانت أكثر من Block تخزن طول البيانات في أخر 64 bit في نهاية Block الأخير(ويعتبر هذا جزء من Block bit الخاص بالرسالة( .واستخدمنا هنا 64 bit لتمثيل طول الرسالة أي إننا نستطيع ان نشفر رسالة  بخوارزمية MD5 طولها 2^64

 

pp1.png


                                                                      شكل (2)

كما مبين في الشكل (2) الرسالة اذا كانت طولها أكثر من 512 bit تقسم الى Block كل واحد حجمه 512 bit بالأسماء التالية (y0,y1,yq,yl-1) وكل Block يدخل على HMD5 واحد .

مثال : إدخال رسالة محتواها (hi) لاحظ انه حولها الى النظام الثنائي بالصيغة التالية (01101000 01101001)
 

p2.png

نلاحظ ان البيانات حجمها 16bit لذالك لكي يجعلها Block يجب ان تصل عددها الى 448bit لذالك سيضيف 1bit قيمته واحد و431bit قيمته صفرالى نهاية السلسلة

 

pp6.png



    و 64bit البقية تمثل طول الرسالة الحقيقية بصيغة النظام الثنائي لاحظها تحتها خط (وهي طولها 16 bit)
(0000000000000000000000000000000000000000000000000000000000010000)
 .حتى يصبح طول البيانات الكلي 512bit

 p3.png

 

 
2.    في شكل (1) جزء رقم (2) او شكل(3)  وهي مجموعة عمليات تجري ضمن كل HMD5 هذا الجزء مقسم إلى أربع ROUND كل واحدة منها تنفذ  عملياتها   16 مرة سوف نشرح على جزء واحد و لمرة واحدة والبقية نفسها تكرر لكن على البيانات المحدثة الجديدة  حيث
Yq : يمثل 512 bit الخاص ب  Block بيانات رسالة   معينة  حيث يقسم الى 16 block كل واحد بحجم 32 bit  كلها تمرر على جميع ROUND الأربعة وهي ثابتة لا تتغير خلال 16 مرة تنفيذ داخل كل ROUND ضمن HMD5 الواحد لأنها تمثل بيانات رسالة معينة لكنها تتغير  في HMD5 التالي لأنها بيانات block أخر ضمن الرسالة والبيانات الناتجة لكل من (A,B,C,D) من هذا HMD5 تنتقل عبر CV الى CV1 التالي شاهد شكل (1)

 

pp7.png

 

 ناتج الجمع هنا  هو mod 2^32


(A,B,C,D) هي  أربعة  REGISTER حجمها الكلي 128 bit  كل واحد حجمه  32 bit مخزن  فيها قيم أولية   وتتحدث ضمن ROUND الواحد 16 مرة وبعدها الناتج ROUND ينتقل الى ROUND التالي وعندما ينتهي من الأربعة ينتقل الى HMD5 التالي. هذه القيم الأولية بالنظام السادس عشري

 

A = 67452301B = EFCDAB89C = 98BADCFED = 10325476

 

 

T : هي قيم بالرادين تستخدم لتعقيد التشفير تحضر وفق المعادلة التالية

 

i=1:64; x= abs(sin(i))* 2^32

 

   

أي نكون مصفوفة T  تبدأ من 1 الى64 وفق المعادلة أعلاه . حيث تحول هذه البيانات الى نظام Hex حيث كل ROUND يأخذ جزء منها
توضيح :-

 

 ROUND1 الأول يأخذ من  T[1—16] ROUND2 الثاني يأخذ من  T[17—32] ROUND3 الثالث يأخذ من  T[33—48] ROUND4 الرابع يأخذ من  T[49—64]

 

 

 

pp8.png

 

 

 3.    شكل  (4) هي العمليات التي ستجري 16 مرة ضمن كل ROUND لاحظ شكل (1)

pp4.png

 

                                                           شكل (4)

 

CLS:  هي circular left shift   أي تدوير مع s bit مقدار التدوير نحن نحدده مرة واحدة او اكثر
مثال : 00110  لو أزحناها بمقدار 2 من اليسار إلى اليمين ستصبح النتيجة 11000

  g : هي معادلة الدوال (F,G,H,I)  وهي عند كل ROUND  لها معادلة مختلفة
مثال: عند ROUND1  الخاص F   تكون  

 

 

g=F(b,c,d)=(b and  c)Or(Not( and d).

 

 

وهي دوال Boolean تحضر وفق المعادلات التالية

 

 

 

g=F(b,c,d)=(b and  c)Or(Not( and d).g=G(b,c,d)=(b and c)Or(b and Not(d)).g=H(b,c,d)=(b  Xor  c  Xor  d).g=I(b,c,d)=c Xor (b Or  Not(d)) 

 

 

 

X[k  : هي بيانات رسالة لكل block الذي كان يحتوي على 512 bit 

قسمة الى 16 block كل     واحد بحجم 32 bit

 

تشفير الخوارزمية بلغة VB.NET

 

تنتج هذه الخوارزمية مفتاح طوله 128 bit (16 byte  )  .المثال التالي يشفر أي نص او ملف ( صورة او صوت او مقطع فيديو او أي نوع اخر من الملفات) بخوارزمية MD5

pro1.png

 

بداية نبني دالة تستقبل النص او الملف المراد تشفيره بصيغة Byte وتعيد لنا MD5 Hash الخاص بهذا النص بكل سهولة حيث نعرف داخل هذه الدالة متغير من نوع MD5  جديد ونكونه وبعده نعمل ComputeHash للبيانات المستلمة  لحساب Hash لها وبعدها نحولها اللى بينات  من Byte  الى  صيغة HEX

 

VB.NET CODEPublic Function GetMD5Data(ByVal data As Byte()) As String'create new instance of md5Dim md5a As MD5 = MD5.Create()'convert the input text to array of bytesDim hashData As Byte() = md5a.ComputeHash(data)'create new instance of StringBuilder to save hashed dataDim returnValue As New StringBuilder()'loop for each byte and add it to StringBuilderFor i As Integer = 0 To hashData.Length - 1returnValue.Append(hashData(i).ToString("x2"))Next' return hexadecimal stringReturn returnValue.ToString()End Function

 

في زر (FIND MD5) نحول النص الذي نكتبه الى Byte ونرسله الى الدالة لكي تعيد لنا Hash له
لنستعرض نتيجتها بالنص الثاني ونعرض البيانات ايضاً داخل ListBox

 

VB.NET CODETextBox2.Text = GetMD5Data(Encoding.[Default].GetBytes(TextBox1.Text))        ListBox1.Items.Clear()        For i = 0 To Len(TextBox2.Text) - 2 Step 2            ListBox1.Items.Add(TextBox2.Text(i) & TextBox2.Text(i + 1))        Next

 

 

وفي زر (تشفير ملفات) نتصف ملفات من الحاسبة وبعدها نحولها الى Byte ونرسلها الى الدالة لكي تعيد Hash  لها

 

VB.NET CODE   'read file and find it md5Dim op As New OpenFileDialogop.ShowDialog()Dim fData As Byte() = File.ReadAllBytes(op.FileName)TextBox2.Text = GetMD5Data(fData)ListBox1.Items.Clear()For i = 0 To Len(TextBox2.Text) - 2 Step 2ListBox1.Items.Add(TextBox2.Text(i) & TextBox2.Text(i + 1))Next

 

 

نستخدم   الدالة  التالية عند المستلم للتأكد ان النص المستلم هو نفسه المرسل وذالك بمقارنة المفتاح المرسل مع المفتاح الناتج من الرسالة المستلمة

 

VB.NET CODEFunction ValidateMD5Data(ByVal inputData As Byte(), ByVal storedHashData As String) As Boolean'hash input text and save it string variableDim getHashInputData As String = GetMD5Data(inputData)If String.Equals(getHashInputData, storedHashData) ThenReturn TrueElseReturn FalseEnd If End Function

 

 

 

خوارزمية Secure Hash Algorithm(SHA

 

هي إحدى خوارزميات Hash تقوم بإيجاد سلسلة ثابتة من أي نص أو ملف توجد عدة أنواع منها
SHA1: تنتج هذه الخوارزمية مفتاح طوله 160 bit (20 byte  )
SHA512: تنتج هذه الخوارزمية مفتاح طوله 512 bit (64 byte  ) من أي رسالة او ملف مهما كان طوله
وعدد من الأنواع SHA الأخرى كما نرها بالشكل (4) بالأسفل وخاصية كل نوع

سوف نشرح بالتفصيل طريقة عمل  SHA512 المبينة بالشكل (5)
 

Untitled-1.jpg                                                                         شكل  (5)

 

في الشكل(5) يبين لك طريقة عمل SHA512 وقمت بتقسيمها الى أربعة اجزاء لكل يسهل فهمها وسوف اشرح كل جزء بالتفصيل


جزء رقم (1)
نعرف ان SHA512 تستقبل أي طول من البيانات وتجد له  HASH طوله 512 bit في شكل  (6)
 يقسم الرسالة الى Block كل واحد حجمه  1024 bit واخر 128 bit في اخير Block يكون محجوز  لطول البيانات الحقيقية أي تستطيع هذه الخوارزمية ان تجد HASH لبيانات أقصى حد لطولها 2^128 والبتات Bit التي تبقى فارغة بين اخر 128 bit والبيانات الحقيقية للرسالة بعد تحويلها الى binary نعمل لها padding أي ندخل رقم واحد ويتبعه عدد من الاصفار حتى نملئ bits الفارغة. وان اخر Block يتقبل فقط  896 bit لان كما قلنا اخر 128 bit في اخر Block تكون محجوزة لطول الرسالة الحقيقية بصيغة نظام ثنائي
 

1.png


                                                                                           شكل  (6)
 

 

حيث iv=H0 يمثل  Registers الثمانية (A,B,C,D,E,F,G,H) كل واحد حجمه 64 bit مجموعهم  هو 512 bit  الذي سيمثل في النهاية Hash الخاص بالرسالة .وهذه القيم الأولية المخزنة داخل Registers
 

sha6.png

                                                                

 

الجزء رقم (2)


الذي يمثل الجزء رقم2  في شكل (5) هو حرف (F) في الجزء رقم1 .حيث يتكرر نفس عملياته مع كل Block لذالك سوف نشرح على Block واحد والبقية نفس الشيء. يمثل شكل (7)    العمليات التي ستجري على كل Block  من الرسالة الحقيقية لينتج مفتاح طولها 512 bit مخزن في (A,B,C,D,E,F,G,H)  ويعتبر كمدخل  للعمليات على  Block   التالي   اذا كانت البيانات اكثر من Block وكما مبين في الشكل(7)  او تعتبر النتيجة النهائية اذا كانت البيانات عبارة عن Block  واحد . وان كل (F)  مقسم الى 80 Round كل واحد تنفذ العمليات في داخله مره واحد (جزء رقم4 في شكل(5) يمثل العمليات التي ستجري ضمن كل Round)
 

2.png


                                                                             شكل  (7)
 

 

في شكل (7) كل Round  من 80 يدخل عليه قيمة K معين  بين (K0-K79)  وهي قيم ثابتة مكون من 64 bit  تأخذ من الجدول التالي
 

sha7.png




الجزء رقم (3)

 


كما نلاحظ ان في شكل  (7) كل Round يدخل عليه قيمة من بيانات Block طولها 64 bit وان طول Block  الواحد هو  1024 bit  لذالك يقسم (1024) الى  16 Block كل واحد حجمه 64 bit ممثلا (W0-W15)  ويدخل على اول  16 Round
 

4.png

                                                                                شكل  (8)
 

 

وبقية Round تأخذ Wt  وفق المعادلة التالية
 

5.png






جزء رقم (4):
 جزء رقم4 في شكل(5) يمثل العمليات التي ستجري ضمن كل Round ليتم من خلا لها التحديث على قيم Registers التي ستعتبر القيم المحدثة كمدخل Round التالي وفي اخر Round تعتبر Hash الخاص بالرسالة اذا كانت الرسالة من Block  واحد وخلافه تعتبر مدخل لبيانات Registers في Block  التالي
 

3.png

                                                                     شكل  (9)


Wt: يمثل 64 bit  من بيانات Block تم شرح طريقة تحضيرها لكل Round سابقا
Kt  : وهي قيم ثابتة مكون من  64 bit  تأخذ من الجدول تم شرحها سابقا
 

sha8.png

 

برمجة الخوارزميات


SHA1: تنتج هذه الخوارزمية مفتاح طوله 160 bit (20 byte  )

 

pro3.png

 

VB.NET CODEFunction GetSHA1Data(ByVal data As Byte()) As String'create new instance of md5Dim sha As SHA1 = SHA1.Create()'convert the input text to array of bytesDim hashData As Byte() = sha.ComputeHash(data)'create new instance of StringBuilder to save hashed dataDim returns As New StringBuilder()'loop for each byte and add it to StringBuilderFor i As Integer = 0 To hashData.Length - 1returns.Append(hashData(i).ToString("x2"))Next' return hexadecimal stringReturn returns.ToString()End Function

 

 

 

SHA512: تنتج هذه الخوارزمية مفتاح طوله 512 bit (64 byte  ) 

 

 

 

 

 

 

 

 بناء برنامج تشفير SHA512

 

pro2.png

 

 

 

VB.NET CODEFunction GetSHA512Data(ByVal data As Byte()) As String'create new instance of md5Dim sha As SHA512 = SHA512.Create()'convert the input text to array of bytesDim hashData As Byte() = sha.ComputeHash(data)'create new instance of StringBuilder to save hashed dataDim returns As New StringBuilder()'loop for each byte and add it to StringBuilderFor i As Integer = 0 To hashData.Length - 1returns.Append(hashData(i).ToString("x2"))Next' return hexadecimal stringReturn returns.ToString()End Function

 

الشرح مفصل بالمرفقات هنا بالمقالة وضعت الشرح بشكل مختصر

 

تحميل شرح خوارزمية خطوة خطوة مع كود هنا

http://www.4shared.com/office/51z4zQIY/_MD5SAHHMAC__221.html
تحميل المثال Code

http://www.mediafire.com/?sw1y2x63pn7qcb7

 

مدونتي

http://hussienahmmed.blogspot.com/

تم تعديل بواسطه حسين احمد طالب
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

3 إجابة على هذا السؤال .

  • 0

مشكور اخي العزيز 

ولكنك لم تضع في المثال كود ارجاع التشفير الى ماكان عليه 

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

اخي اقرا المقال جيدا خوارزميات Hash ليست خوارزميات تشفير

انما خوارزميات مصداقية وصول بيانات

يعني ليس لها فك تشفير ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

تمعن الصور جيدا

واقرا بداية المقال ستفهم

تم تعديل بواسطه حسين احمد طالب
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

جزاك الله خير على الشرح والتوضيح وجعله في ميزان حسناتك

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .