One Way Hash of a String
التشفير
موضوع هام جدا و هناك أساليب كثيرة لتشفير البيانات وحفظها في ملفات
والتشفير في إتجاه واحد هو واحدا من أساليب التشفير الهامة و تكمن فكرته في أننا تقوم بتشفير البيانات ولكننا لا نستطيع ان تعيد البيانات مرة أخري إلي حروفها الأصلية
وهنا قد يتساءل البعض و ما الهدف و كيف نستفيد من هذا الأمر؟
عموما و لمزيد من الإطلاع يوجد في موقع مايكروسوفت مثالا للتشفير في إتجاه واحد باستخدام MD5 - HashAlgorithm و المثال الخاص بمايكروسوفت بسيط و سهل جدا ويوضح كيفية التشفير و التأكد من التشفير
ما الهدف من التشفير في إتجاه واحد؟
الأمر متروك غالبا لرؤية المبرمج في كيفية استخدام هذا النوع من التشفير لكن أهم أهداف التشفير في إتجاه واحد هو تشفيير كلمات السر التي تستخدم غالبا للدخول الي المواقع الإلكترونية او التي تستخدم في الدخول الي برنامج او إلي قاعدة بيانات تم حمايتها بكلمة سر معينة
و في هذا الموضوع لن نستخدم المثال الخاص بمايكروسوفت بل سوف نوضح كيفية التشفير في إتجاه واحد باستخدام انواع مختلفة من HashAlgorithm ثم نتأكد أن التشفير يعمل بشكل جيد
فكرة التشفير في إتجاه واحد تكمن في الخطوات التالية:
1-تحويل String الي Byte Array
2-نقوم بحساب Hash لهذه Byte Array و ذلك باستخدام واحدا من HashAlgorithm الموجودة في فضاء الأسماء System.Security.Cryptography و الناتج سيكون عبارة عن Byte Array أيضا
3-ثم أخيرا نقوم بتحويل العناصر و التي هي عبارة عن numeric value و الموجودة في تلك Byte Array إلي ما يكافئها من Hexadecimal String أي ان الناتج النهائي هو عبارة عن Hexadecimal String
عموما التشفير الناتج من هذه العملية قد يكون عبارة عن String طويل جدا ولكن يمكن التحكم في طول هذا String واختصاره الي طول أقل
الكلاس التالي يمكن استخدامه في تشفيير كلمات السر أو في تشفير اي كلمة معينة ثم نتأكد لاحقا من أن كلمة السر صحيحة
والتشفير في إتجاه واحد هو واحدا من أساليب التشفير الهامة و تكمن فكرته في أننا تقوم بتشفير البيانات ولكننا لا نستطيع ان تعيد البيانات مرة أخري إلي حروفها الأصلية
وهنا قد يتساءل البعض و ما الهدف و كيف نستفيد من هذا الأمر؟
عموما و لمزيد من الإطلاع يوجد في موقع مايكروسوفت مثالا للتشفير في إتجاه واحد باستخدام MD5 - HashAlgorithm و المثال الخاص بمايكروسوفت بسيط و سهل جدا ويوضح كيفية التشفير و التأكد من التشفير
ما الهدف من التشفير في إتجاه واحد؟
الأمر متروك غالبا لرؤية المبرمج في كيفية استخدام هذا النوع من التشفير لكن أهم أهداف التشفير في إتجاه واحد هو تشفيير كلمات السر التي تستخدم غالبا للدخول الي المواقع الإلكترونية او التي تستخدم في الدخول الي برنامج او إلي قاعدة بيانات تم حمايتها بكلمة سر معينة
و في هذا الموضوع لن نستخدم المثال الخاص بمايكروسوفت بل سوف نوضح كيفية التشفير في إتجاه واحد باستخدام انواع مختلفة من HashAlgorithm ثم نتأكد أن التشفير يعمل بشكل جيد
فكرة التشفير في إتجاه واحد تكمن في الخطوات التالية:
1-تحويل String الي Byte Array
2-نقوم بحساب Hash لهذه Byte Array و ذلك باستخدام واحدا من HashAlgorithm الموجودة في فضاء الأسماء System.Security.Cryptography و الناتج سيكون عبارة عن Byte Array أيضا
3-ثم أخيرا نقوم بتحويل العناصر و التي هي عبارة عن numeric value و الموجودة في تلك Byte Array إلي ما يكافئها من Hexadecimal String أي ان الناتج النهائي هو عبارة عن Hexadecimal String
عموما التشفير الناتج من هذه العملية قد يكون عبارة عن String طويل جدا ولكن يمكن التحكم في طول هذا String واختصاره الي طول أقل
الكلاس التالي يمكن استخدامه في تشفيير كلمات السر أو في تشفير اي كلمة معينة ثم نتأكد لاحقا من أن كلمة السر صحيحة
Imports System.Security.Cryptography
Imports System.TextPublic Class Hasher
Private Const hashLength As Integer = 8
Private internalHasher As HashAlgorithm
Private Property Algorithm As HashAlgorithm
Get
Dim hasher As HashAlgorithm = internalHasher
If hasher Is Nothing Then
hasher = New SHA512Managed
Algorithm = hasher
End If
Return hasher
End Get
Set(value As HashAlgorithm)
internalHasher = value
End Set
End Property
Public Function Verify(input As String, hash As String) As Boolean
Return VerifyHash(Encoding.UTF8.GetBytes(input), Encoding.UTF8.GetBytes(hash))
End Function
Private Function VerifyHash(a() As Byte, b() As Byte) As Boolean
Dim length As Integer = a.Length Xor b.Length
Dim i As Integer = 0
While i < a.Length AndAlso i < b.Length
length = length Or a(i) Xor b(i)
i += 1
End While
Return length = 0
End Function
Public Function Hash(input As String) As String
Return Hash(Algorithm, input)
End Function
Private Function Hash(provider As SHA512Managed, input As String) As String
Dim data As Byte() = provider.ComputeHash(Encoding.UTF8.GetBytes(input))
For i As Integer = hashLength To data.Length - 1 Step hashLength
For j As Integer = 0 To hashLength - 1
data(j) = (data(j) Xor data(j + i))
Next
Next
Return BitConverter.ToString(data, 0, hashLength).Replace("-", String.Empty)
End FunctionEnd Class
ٌReferences:
Encoding.GetBytes
HashAlgorithm.ComputeHash
BitConverter.ToString
SHA512Managed Class
Comments
Post a Comment