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 واختصاره الي طول أقل

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

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 Stringhash As String) As Boolean
        Return VerifyHash
(Encoding.UTF8.GetBytes(input), Encoding.UTF8.GetBytes(hash))
 
   End Function

 
   Private Function VerifyHash(a() As Byteb() 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
(Algorithminput)
 
   End Function

 
   Private Function Hash(provider As SHA512Managedinput 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(i))
 
           Next
        Next
        Return BitConverter
.ToString(data0hashLength).Replace("-"String.Empty)

 
   End FunctionEnd Class 


ٌReferences:


Encoding.GetBytes

HashAlgorithm.ComputeHash

BitConverter.ToString

SHA512Managed Class


 DownLoad and Example

Link to Download


Comments

Popular posts from this blog

مقدمة الي تشفير الحروف الأبجدية العربية

VB.NET Translucent Control using GDI+

Add Custom Event to a Class in VB.NET