25-09-14, 07:47 AM
.....
منقول مع تعديل بسيط ليناسب طلبك
ملاحظات:
1- يجب حفظ كل من قيمتي salt وsalted_password في قاعدة البيانات في جدول المستخدم (قد يقوم البعض بحفظ salt في
مكان آخر مع الإشارة إلى رقم العضو لزيادة صعوب التتبع).
2-ولمعرفة التطابق (كتسجيل الدخول مثلا) ترسل password المدخلة مع قيمة salt المحفوظة في قاعدة البيانات إلى الدالة salt_password
ومن ثم تطابق القيمة المعادة من الدالة salt_password مع قيمة salted_password المحفوظة في قاعدة البيانات.
3- المفروض أن تكون طريقة salting password غير معروفة بشكل سهل من أجل عدم محاولة فكها.
لتجربة صحة كلمة المرور إضغط على Button1 ثم اترك بيانات TextBox2 وTextBox3 التي تحتوي على salt وsalted_password كما هي
وحاول تغيير كلمة المرور في TextBox1 والذي يحتوي password ثم اضغط Button2 الموجود في الكود التالي:
.....
منقول مع تعديل بسيط ليناسب طلبك
ملاحظات:
1- يجب حفظ كل من قيمتي salt وsalted_password في قاعدة البيانات في جدول المستخدم (قد يقوم البعض بحفظ salt في
مكان آخر مع الإشارة إلى رقم العضو لزيادة صعوب التتبع).
2-ولمعرفة التطابق (كتسجيل الدخول مثلا) ترسل password المدخلة مع قيمة salt المحفوظة في قاعدة البيانات إلى الدالة salt_password
ومن ثم تطابق القيمة المعادة من الدالة salt_password مع قيمة salted_password المحفوظة في قاعدة البيانات.
3- المفروض أن تكون طريقة salting password غير معروفة بشكل سهل من أجل عدم محاولة فكها.
كود :
' ضع 3 أدوات TextBox
' TextBox1 : Password
' TextBox2: Salt
' TextBox3: Salted password
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim md5pass As String = MD5(Me.TextBox1.Text)
Dim salt As String = generate_salt()
Dim salted_password As String = salt_password(md5pass, salt)
Me.TextBox2.Text = salt
Me.TextBox3.Text = salted_password
End Sub
Private Function salt_password(ByVal password As String, ByVal salt As String) As String
Return MD5(MD5(salt) & password)
End Function
Private Function generate_salt() As String
Return random_str(8)
End Function
Private Function random_str(Optional ByVal size = 8) As String
Dim salt As String = String.Empty
Dim characterList As String = "aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqWrRsStTuUvVwWxXyYzZ123456789"
Dim rnd As New Random
For i = 0 To size - 1
salt &= characterList(rnd.Next(0, (Len(characterList) - 1)))
Next
Return salt
End Function
Public Function MD5(ByVal txt As String) As String
Dim result As String = String.Empty
Dim objMd5 As New System.Security.Cryptography.MD5CryptoServiceProvider()
Dim byts() As Byte = System.Text.Encoding.UTF8.GetBytes(txt)
byts = objMd5.ComputeHash(byts)
For Each b As Byte In byts
result &= b.ToString("x2")
Next
Return result
End Functionلتجربة صحة كلمة المرور إضغط على Button1 ثم اترك بيانات TextBox2 وTextBox3 التي تحتوي على salt وsalted_password كما هي
وحاول تغيير كلمة المرور في TextBox1 والذي يحتوي password ثم اضغط Button2 الموجود في الكود التالي:
كود :
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim md5pass As String = MD5(Me.TextBox1.Text)
Dim salt As String = Me.TextBox2.Text
Dim salted_password As String = salt_password(md5pass, salt)
If salted_password = Me.TextBox3.Text Then
MsgBox("كلمة المرور صحيحة")
Else
MsgBox("عفواً... كلمة المرور غير صحيحة")
End If
End Sub.....



