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

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

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

الكود التالي يوضح الفكرة :
التشفيير
PHP كود :
       Dim source As String "Visual Basic"
 
       Dim keyID As Long CLng(123456789)
 
       Dim accessDate As DateTime DateTime.Now
        Dim password 
As String "vb4arab"

 
       ' تحوي المدخلات الي مصفوفات من البايت
        Dim sourceBytes As Byte() = System.Text.Encoding.Unicode.GetBytes(source)
        Dim keyBytes As Byte() = BitConverter.GetBytes(keyID) ' 
ناتج التشفيير هنا مصفوفة طولها 8
        Dim dateBytes 
As Byte() = BitConverter.GetBytes(accessDate.ToFileTime' أيضا ناتج تحويل التاريخ الي مصفوفة بايت سيكون مصفوفة طولها 8 بايت
        ' 
طول مصفوفة الهاش الناتجة عن الكود في السطر التالي سيكون 64 بايت
        
' ويمكن للمبرمج التحكم في المصفوفة و اقتطاع اي جزء منها بأي طول يحدده هو
        Dim hashBytes As Byte() = New System.Security.Cryptography.SHA512CryptoServiceProvider().ComputeHash(System.Text.Encoding.Unicode.GetBytes(password))

        ' 
لتحصل علي ناتج التشفير تجمع المصفوفات أعلاه و تحولها الي مصفوفة واحدة بأي أسلوب يناسبك
        Dim result 
As Byte() = New Byte(hashBytes.Length dateBytes.Length keyBytes.Length sourceBytes.Length 1) {}
 
       ' سيتم تمرير مصفوفات البايت بالترتيب التالي
        ' 
1hash bytes ------- طول المصفوفة 64 بايت
        
' 2- date bytes ------- طول المصفوفة 8 بايت
        ' 
3key bytes ------- طول المصفوفة 8 بايت
        
' 4- string Bytes ------- طول المصفوفة غير معروف

        System.Array.Copy(hashBytes, 0, result, 0, hashBytes.Length)
        System.Array.Copy(dateBytes, 0, result, hashBytes.Length, dateBytes.Length)
        System.Array.Copy(keyBytes, 0, result, hashBytes.Length + dateBytes.Length, keyBytes.Length)
        System.Array.Copy(sourceBytes, 0, result, hashBytes.Length + dateBytes.Length + keyBytes.Length, sourceBytes.Length) 

فك التشفيير

PHP كود :
       ' فك التشفيير
        Dim codeSize As Integer = 80
        Dim hashSize As Integer = 64

        ' 
الحصول علي مصفوفة التكست بشكل مباشر
        Dim stringBytes 
As Byte() = result.Skip(codeSize).ToArray

        
' الحصول علي مصفوفة الهاش و التاريخ و المفتاح
        Dim layouts As Byte() = result.Take(codeSize).ToArray

        ' 
الحصول علي مصفوفة الهاش او الباسوورد فقط
        
' هذه المصفوفة لا يمكن فك تشفييرها و يمكن استخدامها للمقارنات فقط
        Dim ohtersHash As Byte() = layouts.Take(hashSize).ToArray

        ' 
الحصول علي مصفوفة الاتاريخ و المفتاح
        Dim dateAndKeyLayouts 
As Byte() = layouts.Skip(hashSize).ToArray
        
' الحصول علي مصفوفة التاريخ فقط
        Dim dateLayout As Byte() = dateAndKeyLayouts.Take(8).ToArray

        ' 
الحصول علي مصفوفة المفتاح فقط
        Dim keyLayout 
As Byte() = dateAndKeyLayouts.Skip(8).ToArray

        
' إسترجاع البيانات
        Dim s As String = System.Text.Encoding.Unicode.GetString(stringBytes)
        Dim d As DateTime = DateTime.FromFileTime(BitConverter.ToUInt64(dateLayout, 0))
        Dim k As Long = BitConverter.ToUInt64(keyLayout, 0) 

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


ملحوظة هامة :
هذا الأسلوب يمكن استخدامه ليس فقط في تشفيير String لكن أيضا يمكن كتابته بشكل عام بحيث إنك تستطيع تشفيير ملفات أيضا
والفكرة هنا أن المدخلات يتم تحويلها  من String الي مصفوفة بايت
وبما أن أي ملف يمكن تخويله الي مصفوفة بايت فابالتالي يمكن تشفيير الملفات أيضا
Retired
الرد }}}
تم الشكر بواسطة: ابو خالد , ابو خالد


الردود في هذا الموضوع
التشفير وهم أم حقيقة - بواسطة silverlight - 21-09-17, 01:59 PM
RE: التشفير وهم أم حقيقة - بواسطة silverlight - 26-09-17, 01:42 PM
RE: التشفير وهم أم حقيقة - بواسطة silverlight - 27-09-17, 12:15 PM
RE: التشفير وهم أم حقيقة - بواسطة silverlight - 27-09-17, 04:35 PM
RE: التشفير وهم أم حقيقة - بواسطة silverlight - 30-09-17, 11:59 AM
RE: التشفير وهم أم حقيقة - بواسطة silverlight - 30-09-17, 02:22 PM
RE: التشفير وهم أم حقيقة - بواسطة silverlight - 01-10-17, 02:12 PM
RE: التشفير وهم أم حقيقة - بواسطة sendbad100 - 02-10-17, 03:10 PM
RE: التشفير وهم أم حقيقة - بواسطة silverlight - 04-10-17, 11:12 AM
RE: التشفير وهم أم حقيقة - بواسطة silverlight - 18-10-17, 10:49 AM


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


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