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

التشفيير يتم بتحويل string الي مصفوفة بايت و تحويل المفتاح الي مصفوفة بايت ثم نجمع المصفوفتان معا لنحصل علي مصفوفة ثالثة تكون ناتج التشفيير
ملحوظة هامة
عندما تقوم بتحويل الأرقام الي مصفوفة بايت
Integer يعطيك مصفوفة السعة الخاصة بها 4 بايت
Long يعطيك مصفوفة السعة الخاصة بها 8 بايت

الكود التالي لتوضيح الفكرة:
التشفيير
PHP كود :
       ' تعريف البيانات المراد تشفيييها
        Dim s As String = "Visual Basic"
        Dim key As Long = CLng(123456789)

        ' 
تحويل البيانات الي مصفوفة بايت
        Dim sourceBytes 
As Byte() = System.Text.Encoding.Unicode.GetBytes(s)
 
       Dim keyBytes As Byte() = BitConverter.GetBytes(key)

 
       ' نبيني مصفوفة جديدة يكون حجمها مساويا لحجم مصفوفة التكست + مصفوفة الرقم
        Dim result As Byte() = New Byte(keyBytes.Length + sourceBytes.Length - 1) {}

        ' 
نقوم بنسخ البانات من المصفوفتان الي المصفوفة

        System
.Array.Copy(keyBytes0result0keyBytes.Length)
 
       System.Array.Copy(sourceBytes0resultkeyBytes.LengthsourceBytes.Length

فك التشفيير
بما ان المفتاح أو الرقم المستخدم من النوع Long فإن طول المصفوفة الخاصة به تساوي 8 بايت


PHP كود :
       ' نحدد طول مصوفة المفتاح او الرقم
        Dim keySize As Integer = 8
        ' 
نحذف 8 بايت من المصفوفة الخاصة بناتج التشفيير
        Dim stringBytes 
As Byte() = result.Skip(keySize).ToArray
        
' نقوم بتحويل المصفوفة الي اصلها
        Dim resultString As String = System.Text.Encoding.Unicode.GetString(stringBytes)

        ' 
ناخذ فقط أول 8 بايت من مصفوفة التشفيير
        Dim numberBytes 
As Byte() = result.Take(keySize).ToArray
        
' نقوم بتحويل المصفوفة الي رقم مرة أخري
        Dim resultNumber As Long = BitConverter.ToInt64(numberBytes, 0) 

الكود في المثال يمكن تحويله الي كلاس بسيط كالتالي

PHP كود :
Public Class KeyLayoutEncoder

    Private _source 
As String
    Private _bytes 
As Byte()
 
   Private _validSource As Boolean
    Private _validKey 
As Boolean
    Private _key 
As Long

    Public Sub 
New(source As Stringkey As Long)
 
       _source source
        _key 
key
        _validSource 
= If(Not String.IsNullOrEmpty(source), TrueFalse)
 
       _validkey = If(Not key NothingTrueFalse)
 
   End Sub

    Public ReadOnly Property Vaild 
As Boolean
        Get
            Return Me
._validSource AndAlso _validKey
        End Get
    End Property

    Public ReadOnly Property KeySize 
As Integer
        Get
            Return 8
        End Get
    End Property

    Public ReadOnly Property Bytes 
As Byte()
 
       Get
            Me
.EnsureData()
 
           Return Me._bytes
        End Get
    End Property

    Private Sub EnsureData
()
 
       If Me._validSource AndAlso _validKey Then
            Dim sourceBytes 
As Byte() = System.Text.Encoding.Unicode.GetBytes(Me._source)
 
           Dim keyBytes As Byte() = BitConverter.GetBytes(_key)
 
           _bytes = New Byte(keyBytes.Length sourceBytes.Length 1) {}
 
           System.Array.Copy(keyBytes0_bytes0keyBytes.Length)
 
           System.Array.Copy(sourceBytes0_byteskeyBytes.LengthsourceBytes.Length)
 
       End If
 
   End Sub

    Public Overrides 
Function ToString() As String
        If Me
._bytes Is Nothing Then
            Return String
.Empty
 
       End If
 
       Dim result As String String.Empty
 
       If _bytes IsNot Nothing Then
            Dim i 
As Integer 0
            While i 
_bytes.Length
                result 
+= " "c
                result 
+= _bytes(i).ToString
                i 
+= 1
            End 
While
 
           result result.TrimStart(" "c)
 
       End If
 
       Return result
    End 
Function

End Class 


استخدام الكلاس


PHP كود :
       Dim s As String "Visual Basic"
 
       Dim key As Long CLng(123456789)

 
       Dim keyLayout As KeyLayoutEncoder = New KeyLayoutEncoder(skey)
 
       Dim bytes As Byte() = keyLayout.Bytes 

طبعا من الممكن كتابة كلاس أخر لفك التشقيير أو يتم كتابة الكود الخاص بفك التشفيير علي شكل دالة بسيطة و القرار هنا يكون لمن سيكتب الكود
حاول عزيزيى القارئ أنك تكتب دالة بسيطة لكي تفك التشفيير الخاص بالكلاس
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 ) ضيف كريم