26-09-17, 01:42 PM
(آخر تعديل لهذه المشاركة : 26-09-17, 03:47 PM {2} بواسطة silverlight.)
الأسلوب الرابع :
تحويل البيانات الي Base64String و العكس
وهنا التشفيير يتم بواسطة تحويل المدخلات الي مصفوفة بايت ياستخدام System.Text.Encoding ثم و باستخدام Convert Class يتم تحويل البيانات الي Base64String
ثم و لكي تفك التشفيير يتم تحويل Base64String الي مصفوفة بايت ثم و تأخذ مصفوفة البايت و تقوم بتحويلها الي اصلها باستخدم Encoding
الكلاس التالي يوضح الفكرة
طبعا كل الاكواد موجودة علي النت فقط لقد قمت بكتابة الكود علي هيئة كلاس
لكن وعلي المبرمج إن أراد استخدام أكواد يستخدمها الجميع تقريبا
هنا علي المبرمج ن يكون مخادعا قليلا و يكتب الكود بأسلوب لا يفهمه إلا القليل من المبرمجين
مثلا الكلاس به خدعة بسيطة جدا
وهي أن Constructor الخاص بالكلاس يقبل String سواء كانت المدخلات تم تشفيرها أو لم يتم تشفييرها
الإستخدام
التحويل من و الي Base64String ممكن كتابة الكود الخاص به بأساليب كثيرة و الأمر متروك للمبرمج
الكلاس التالي يوضح احدي هذه الأساليب و هنا يتم التشفيير وفك التشفيير باستخدام كلمة سر
وبالرغم ان الكلاس مكتوب بشكل يبدو صعبا للبعض منكم لكن فعليا هو بسيط جدا و يمكن تلخيصه في دالتان
الإستخدام
تحويل البيانات الي Base64String و العكس
وهنا التشفيير يتم بواسطة تحويل المدخلات الي مصفوفة بايت ياستخدام System.Text.Encoding ثم و باستخدام Convert Class يتم تحويل البيانات الي Base64String
ثم و لكي تفك التشفيير يتم تحويل Base64String الي مصفوفة بايت ثم و تأخذ مصفوفة البايت و تقوم بتحويلها الي اصلها باستخدم Encoding
الكلاس التالي يوضح الفكرة
PHP كود :
Public Interface IEncoder
Function EncodeString() As String
End Interface
Public Interface IDecoder
Function DecodeString() As String
End Interface
Public NotInheritable Class EncodeDecodeString
Public Shared Function Encode(s As String) As IEncoder
Return New EncoderDecoder(s)
End Function
Public Shared Function Decode(s As String) As IDecoder
Return New EncoderDecoder(s)
End Function
Private Class EncoderDecoder
Implements IDecoder, IEncoder
Private _source As String
Private _length As Integer
Public Sub New(source As String)
Me._source = source
Me._length = If(source IsNot Nothing, 1, 0)
End Sub
Public Function DecodeString() As String Implements IDecoder.DecodeString
Dim result As String = ""
If _length > 0 Then
Dim bytes As Byte() = System.Convert.FromBase64String(_source)
result += System.Text.Encoding.Unicode.GetString(bytes)
End If
Return result
End Function
Public Function EncodeString() As String Implements IEncoder.EncodeString
Dim result As String = ""
If _length > 0 Then
Dim bytes As Byte() = System.Text.Encoding.Unicode.GetBytes(_source)
result += System.Convert.ToBase64String(bytes)
End If
Return result
End Function
End Class
End Class
طبعا كل الاكواد موجودة علي النت فقط لقد قمت بكتابة الكود علي هيئة كلاس
لكن وعلي المبرمج إن أراد استخدام أكواد يستخدمها الجميع تقريبا
هنا علي المبرمج ن يكون مخادعا قليلا و يكتب الكود بأسلوب لا يفهمه إلا القليل من المبرمجين
مثلا الكلاس به خدعة بسيطة جدا
وهي أن Constructor الخاص بالكلاس يقبل String سواء كانت المدخلات تم تشفيرها أو لم يتم تشفييرها
الإستخدام
PHP كود :
Dim encoder As IEncoder = EncodeDecodeString.Encode("visual Basic")
If encoder IsNot Nothing Then
Me.Label1.Text = encoder.EncodeString
End If
Dim decoder As IDecoder = EncodeDecodeString.Decode(Label1.Text)
If decoder IsNot Nothing Then
Me.Label2.Text = decoder.DecodeString
End If
التحويل من و الي Base64String ممكن كتابة الكود الخاص به بأساليب كثيرة و الأمر متروك للمبرمج
الكلاس التالي يوضح احدي هذه الأساليب و هنا يتم التشفيير وفك التشفيير باستخدام كلمة سر
وبالرغم ان الكلاس مكتوب بشكل يبدو صعبا للبعض منكم لكن فعليا هو بسيط جدا و يمكن تلخيصه في دالتان
PHP كود :
Public Interface IEncryptionAccessor
Function EncryptString() As String
Function DecryptedString() As String
End Interface
Public Class EncryptionAccessor
Implements IEncryptionAccessor
Private _key As String
Private _source As String
Private DefaultAccess As AccessorCallback
Private DefaultEncrptiontAccess As AccessorEncryptionCallback
Public Sub New(key As String, source As String)
Me._key = key
Me._source = source
DefaultAccess = New AccessorCallback(AddressOf ProvideAccess)
DefaultEncrptiontAccess = New AccessorEncryptionCallback(AddressOf ProvideAccess)
End Sub
Public Function DecryptedString() As String Implements IEncryptionAccessor.DecryptedString
Dim encoder As UTF8Encoding = New UTF8Encoding()
Dim provider As TripleDESCryptoServiceProvider = Nothing
Dim service As MD5CryptoServiceProvider = DefaultEncrptiontAccess.Invoke(encoder, _key, provider)
Dim buffer As Byte() = Convert.FromBase64String(Me._source)
Dim bytes As Byte() = Nothing
Try
Dim transform As ICryptoTransform = provider.CreateDecryptor()
bytes = transform.TransformFinalBlock(buffer, 0, buffer.Length)
Catch ex As Exception
Finally
service.Clear()
provider.Clear()
End Try
Return encoder.GetString(bytes)
End Function
Public Function EncryptString() As String Implements IEncryptionAccessor.EncryptString
Dim encoder As UTF8Encoding = New UTF8Encoding()
Dim provider As TripleDESCryptoServiceProvider = Nothing
Dim service As MD5CryptoServiceProvider = DefaultEncrptiontAccess.Invoke(encoder, _key, provider)
Dim buffer As Byte() = encoder.GetBytes(_source)
Dim bytes As Byte() = Nothing
Try
Dim transform As ICryptoTransform = provider.CreateEncryptor()
bytes = transform.TransformFinalBlock(buffer, 0, buffer.Length)
Catch ex As Exception
Finally
service.Clear()
provider.Clear()
End Try
Return Convert.ToBase64String(bytes)
End Function
Private Function ProvideAccess(encoder As Encoding, key As String,
ByRef service As MD5CryptoServiceProvider, ByRef provider As TripleDESCryptoServiceProvider) As Integer
Dim result As Integer = 0
service = Nothing
provider = Nothing
If Not String.IsNullOrEmpty(key) Then
service = New MD5CryptoServiceProvider()
Dim bytes As Byte() = service.ComputeHash(encoder.GetBytes(key))
provider = New TripleDESCryptoServiceProvider() With {.Key = bytes, .Mode = CipherMode.ECB, .Padding = PaddingMode.PKCS7}
result = result + 1
End If
Return result
End Function
Private Function ProvideAccess(encoder As Encoding, key As String,
ByRef provider As TripleDESCryptoServiceProvider) As MD5CryptoServiceProvider
Dim service As MD5CryptoServiceProvider = Nothing
If DefaultAccess.Invoke(encoder, key, service, provider) > 0 Then
Return service
End If
Return Nothing
End Function
Friend Delegate Function AccessorCallback(encoder As Encoding, key As String, ByRef service As MD5CryptoServiceProvider, ByRef provider As TripleDESCryptoServiceProvider) As Integer
Friend Delegate Function AccessorEncryptionCallback(encoder As Encoding, key As String, ByRef provider As TripleDESCryptoServiceProvider) As MD5CryptoServiceProvider
End Class
الإستخدام
PHP كود :
Dim key As String = "123456"
Dim cryptor As IEncryptionAccessor = New EncryptionAccessor(key, "Visual Basic")
Dim encrypted As String = cryptor.EncryptString
Dim decryptor As IEncryptionAccessor = New EncryptionAccessor(key, encrypted)
Me.Text = decryptor.DecryptedString
Retired

