تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
Hash & UnHash
#1
مقدمة

Hash في مفهومه البسيط هو أن تأخذ أي رقم يكون عبارة عن Integer ثم تقوم بإجراء بعض العمليات الحسابية عليه و تشترجع رقم مختلف عن الرقم الأصلي
و غالبا يمكن إعتباره نوع من التشفير باستخدام عمليات حسابية بسيطة أو معقدة

Unhash هو عملية عكسية تماما و أيضا مفهومه البسيط هو أن تأخذ الرقم الناتج من Hash و تقوم بإجراء نفس العمليات الحسابية عليه و لكن بشكل عكسي تماما و في النهاية تحصل علي الرقم الأصلي الذي تم استخدامه في عمليه Hash و بعض الناس يحلو لهم أن يطلقوا علي  هذا Reverse Engineering أو الهندسة العكسية
وغالبا يمكن إعتباره نوع من  فك للتشفير

في واقع الأمر علي كل مبرمج أن يتفهم أن التشفير و فك التشفير عملية في غاية الخطورة
و الخطورة في هذا الأمر هي أن يستطيع اي شخص الحصول علي كيفية تشفير الرقم ومن ثم يستطيع أن يفك التشفير عن أي شئ أنت قمت بتشفيره

وبدون الدخول في كلام نظري لنضع بعض الأمثلة لتوضيح الفكرة

المثال الأول:
تشفير الرقم

PHP كود :
       ' تعريف المتغير الرقمي
        Dim x As Integer = 3487
        ' 
إجراء بعض العمليات الحسابية علي هذا الرقم
        
' نضيف له اي قيمة أخري و لتكن 256
        x = x + 256
        ' 
نضرب الناتج في اي رقم وليكن 8
        x 
8
        
' نطرح منه اي رقم و ليكن 20
        x = x - 20 

المثال الثاني
فك التشفير عن الرقم
PHP كود :
       ' هذا المتغير يعبر عن القيمة الناتجة من عملية التشفير
        Dim result As Integer = x
        ' 
فقط نقوم بعكس العمليات الحسابي

        
' نضيف له الرقم الذي تم طرحه وهو 20
        result = result + 20
        ' 
نقسمه علي الرقم و هو 8
        result 
result 8

        
' أخيرا نطرح منه الرقمو هو 256

        result = result - 256

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

المثال الثاني

لنكتب اي دالتان أحدهما تقوم بعمليات حسابية بسيطة علي اي رقم
و نكتب الدالة العكسية لها
و الكود سيكون شئ من هذا القبيل

PHP كود :
   Private Function Hash(As Integer) As Integer
        x 
1050
        x 
x
        x 
4
        x 
10
        Return x
    End 
Function

 
   Private Function UnHash(As Integer) As Integer
        x 
10
        x 
4
        x 
Math.Sqrt(x)
 
       x 1050
        Return x
    End 
Function 

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

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

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

أولا: تشفير اي حرف أبجدي
PHP كود :
       ' لنفترض أن لدينا حرف أبجدي
        Dim chr As Char = "A"c

        ' 
الان لنقوم بتشفير هذا الحرف
        
' اولا نقوم بتحويل الحرف الي رقم
        Dim chrInteger As Integer = Asc(chr)

        ' 
ثانيا نقوم بتشفير الرقم 
        Dim hashed 
As Integer Hash(chrInteger)

 
       ' لنعرض الرقم الناتج من عملية التشفير علي الفورم
        Label1.Text = hashed 

ثانيا فك التشفير عن الحرف الأبجدي


PHP كود :
       ' عملية فك التشفير

        ' 
ناخذ الرقم الناتج من عملية التشفير
        Dim hashedInteger 
As Integer CInt(Label1.Text)

 
       ' نفك التشفير عن هذا الرقم
        Dim unhased As Integer = UnHash(hashedInteger)

        ' 
 نقوم بتحويل الرقم الي حرف مرة أخري
        Dim resultChar 
As Char ChrW(unhased)

 
       ' لنعرض الحرف علي الفورم
        Label2.Text = resultChar.ToString 

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

أتمني ان يكون الموضوع مفيدا للبعض منكم
الرد }}}
#2
بارك الله فيك. وصلت الفكرة.
الرد }}}
تم الشكر بواسطة: silverlight
#3
طريقة حلوة 
جزاك الله خيرا
                                                        Heart سبحان الله والحمد لله ولا اله الا الله والله اكبر  Heart
الرد }}}
تم الشكر بواسطة: silverlight
#4
جزاك الله خيرا
الرد }}}
تم الشكر بواسطة: silverlight


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  Hash Algorithm RaggiTech 0 1,793 01-10-12, 05:47 PM
آخر رد: RaggiTech

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم