30-09-17, 11:59 AM
(آخر تعديل لهذه المشاركة : 30-09-17, 02:23 PM {2} بواسطة silverlight.)
المثال الثاني
نحدد شكلا أخر للنسق :
1- بيانات عبارة عن String مطاوب تشفييرها
2- نضيف رقم للنسق كمفتاح للتشفيير
التشفيير يتم بتحويل string الي مصفوفة بايت و تحويل المفتاح الي مصفوفة بايت ثم نجمع المصفوفتان معا لنحصل علي مصفوفة ثالثة تكون ناتج التشفيير
ملحوظة هامة
عندما تقوم بتحويل الأرقام الي مصفوفة بايت
Integer يعطيك مصفوفة السعة الخاصة بها 4 بايت
Long يعطيك مصفوفة السعة الخاصة بها 8 بايت
الكود التالي لتوضيح الفكرة:
التشفيير
فك التشفيير
بما ان المفتاح أو الرقم المستخدم من النوع Long فإن طول المصفوفة الخاصة به تساوي 8 بايت
الكود في المثال يمكن تحويله الي كلاس بسيط كالتالي
استخدام الكلاس
طبعا من الممكن كتابة كلاس أخر لفك التشقيير أو يتم كتابة الكود الخاص بفك التشفيير علي شكل دالة بسيطة و القرار هنا يكون لمن سيكتب الكود
حاول عزيزيى القارئ أنك تكتب دالة بسيطة لكي تفك التشفيير الخاص بالكلاس
نحدد شكلا أخر للنسق :
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(keyBytes, 0, result, 0, keyBytes.Length)
System.Array.Copy(sourceBytes, 0, result, keyBytes.Length, sourceBytes.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 String, key As Long)
_source = source
_key = key
_validSource = If(Not String.IsNullOrEmpty(source), True, False)
_validkey = If(Not key = Nothing, True, False)
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(keyBytes, 0, _bytes, 0, keyBytes.Length)
System.Array.Copy(sourceBytes, 0, _bytes, keyBytes.Length, sourceBytes.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(s, key)
Dim bytes As Byte() = keyLayout.Bytes
طبعا من الممكن كتابة كلاس أخر لفك التشقيير أو يتم كتابة الكود الخاص بفك التشفيير علي شكل دالة بسيطة و القرار هنا يكون لمن سيكتب الكود
حاول عزيزيى القارئ أنك تكتب دالة بسيطة لكي تفك التشفيير الخاص بالكلاس
Retired

