تقييم الموضوع :
  • 1 أصوات - بمعدل 5
  • 1
  • 2
  • 3
  • 4
  • 5
التشفيير في إتجاه واحد
#1
السلام عليكم ورحمة الله وبركاته


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

عموما و لمزيد من الإطلاع يوجد في موقع مايكروسوفت مثالا للتشفير في إتجاه واحد باستخدام  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 واختصاره الي طول أقل


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


PHP كود :
Imports System.Security.Cryptography
Imports System
.Text

Public 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 Function

End Class 

في المرفقات ستجدون فكرة لكيفية الاستفادة من الكلاس و مثالا لكيفية استخدامه


المصادر:

Encoding.GetBytes

HashAlgorithm.ComputeHash

BitConverter.ToString

SHA512Managed Class


الملفات المرفقة
.rar   Test_OneWayHash.rar (الحجم : 60.01 ك ب / التحميلات : 73)
الرد }}}}
تم الشكر بواسطة: myalsailamy , Adrees
#2
كلام جميل و مهم لكل مبرمج ان يعرفه و من المواضيع التي افضل مناقشتها اكثر من الاسئله الاعتياديه في المنتدى ،،

التشفير في اتجاه واحد مفيد في حالات عدة و لكن كحصر في كلمة المرور البعض يتسائل بعد تشفير البيانات وحفظها بقاعدة البيانات كيف استفيد منها ، الطريقه وهو عند تسجيل مثلا دخول المستخدم لمره اخرى تاخذ الباسورد الذي قام بادخالها تقوم بتشفيرها كما فعلت معها لاول مره عند حفظها ، ثم تقوم بالمقارنه التشيفر بالتشفير المحفوظ اذا كان مطابق فانه قام بادخال البيانات الصحيحه عكس ذلك فلا يسمح له

بنسبه لي انا استخدم تشفيرات معينه مشهوره مثل MD5 و لكن اضع طابعا لي بعد تشفيرها بخوارزميه و هي مثلا اعادة الترتيب للنص المشفر بحيث انه في حالة قدرة المهاجم على كسر اي تشفير تبقى البيانات خطا بالنسبه له

تحياتي
اسم معرفي : محمد يحيى
الرد }}}}
تم الشكر بواسطة:
#3
هنا انا استخدمت SHA512Managed و ليس MD5 و في دالة التشفير قمت باختيار عدد معين من البايت و ليس كل البايت الناتجة من الدالة ComputeHash وللتوضيح أكثر طول التكست الناتج من الدالة ComputeHash غالبا خليط من أرقام و حروف و طوله لن يقل عن 128 حرف و هذا طبعا بعد ان نحذف منه العلامة "-" و هنا ما يحدث انه وكل 8 بايت يتم اختيار بايت واحدة و في النهاية طول التكست الناتج عن التشفير لن يتعدي 16 حرفا وهذا كان الهدف من الكلاس وهو تقليل طول التكست
عموما و كما تفضلت من الممكن أن تضيف اي علامة الي String كنوع من الحماية الإضافية
و إن شاء الله لاحقا سوف اقوم بَاضافة مثال اخر لكيفية استخدام الكلاس بدون ان تكون به الباسوورد المراد تشفيرها و لكنها ستكون موجودة في ملف مرفق مع المشروع و لنري من سوف يستطيع كسر هذا التشفير
أصلا الكلاس الفعلي انا كتبته بأسلوب مختلف تماما حيث أن عملية التشفير تتم علي خمسة مستويات
و الكلاس الموجود هنا فقط للعلم كفكرة عن الموضوع
الرد }}}}
تم الشكر بواسطة: myalsailamy
#4
جميل  يا اخي silverlight  جربته و كان تمام  بس فيه  نقطه بسيطه جدا كمبرمج لو نشرت الكلاس الخاص بك  من حيث الية الاستخدام  
خليها بهذا الشكل  :
كود :
        Dim oHasher As New Hasher
        Dim Hasherstr As String = oHasher.Hash("Test")
        Dim Verifyresult As Boolean = oHasher.Verify("Test", Hasherstr)

و الكلاس يتم تعديله  :


كود :
    Public Function Verify(ByVal input As String, ByVal hash As String) As Boolean
        Dim HashInput As String = Me.Hash(input)
        Return VerifyHash(Encoding.UTF8.GetBytes(HashInput), Encoding.UTF8.GetBytes(hash))
    End Function


لانه ايحاء  input  يدل على ادخال النص بدون تشفير عندما قمت باستخدام الكلاس الخاص بك بدون انزال المثال المصغر على العموم  ليست بالمعضله الكبيره مجرد ملاحظه من تجربة مستخدم لكلاس مفتوح المصدر

___________________________________

النقطه الأهم من تعليقي  وهو  رغبتي  بالحصول  على كلاس  للتشفير  و فك التشفير ذو اتجاهين  اذا كنت تملك واحده و ناتج التشفير  قصير  قم بمشاركتنا اياها  لانها تهمني في  ASP.Net  تحياتي لك
اسم معرفي : محمد يحيى
الرد }}}}
تم الشكر بواسطة:
#5
افدتني شكرا لك
(( نحن قوم أعزنا الله بالإسلام فمهما ابتغينا العزة بغيره أذلنا الله )) .. 











الرد }}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [مقال] دمج كل ملفات برنامجك الى ملف تنفيذى واحد ali.alfoly 25 7,877 02-12-16, 04:04 PM
آخر رد: ali.alfoly
  مجموعة التشفير في إتجاه واحد silverlight 2 380 15-05-16, 05:01 PM
آخر رد: CLARO
  [كود] إختيار صف واحد أو اختيار جميع الصفوف في الداتا جريد فيو silverlight 0 333 18-12-15, 03:50 PM
آخر رد: silverlight
  تعلم حماية برنامجك بحيث لا يعمل الا على قرص صلب واحد RaggiTech 0 823 03-10-12, 09:36 AM
آخر رد: RaggiTech
  الدالة Environ العظيمه جميع بيانات الحاسب فى يدك بسطر واحد من الكود RaggiTech 0 593 02-10-12, 04:40 PM
آخر رد: RaggiTech
  الة حاسبة في TextBox واحد فقط RaggiTech 0 506 02-10-12, 09:48 AM
آخر رد: RaggiTech

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


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