مقدمة إلي إخفاء المعلومات - الجزء الثاني
في هذا الجزء من موضوع مقدمة إلي إخفاء المعلومات
سنوضح و بطريقة مبسطة كيف يمكن تحويل تكست او مجموعة من الحروف الي مجموعة من الصور ثم نوضح الكيفية التي من الممكن بها استرداد هذه الحروف مرة أخري من تلك الصور
بشكل عام هدفي من طرح هذا الموضوع هو توضيح انه كيف ومن مجرد فكرة بسيطة أن تخرج منها بأفكار أخري أهم و الفكرة سيتم كتابتها علي مراحل لتوضيح بعضا من الموضوعات التالية
حفظ المعلومات و حمايتها
حماية السورس كود
بناء الباركود و قرائته
تحويل الملفات الي أنماط مختلفة
بناء الفونت
بناء الصور المتحركة
حماية السيريال الخاص باي برنامج
تحويل الحروف الي صور
الخطوات التالية توضح كيفية تحويل مجموعة من الحروف الي مجموعة صور
سنوضح و بطريقة مبسطة كيف يمكن تحويل تكست او مجموعة من الحروف الي مجموعة من الصور ثم نوضح الكيفية التي من الممكن بها استرداد هذه الحروف مرة أخري من تلك الصور
بشكل عام هدفي من طرح هذا الموضوع هو توضيح انه كيف ومن مجرد فكرة بسيطة أن تخرج منها بأفكار أخري أهم و الفكرة سيتم كتابتها علي مراحل لتوضيح بعضا من الموضوعات التالية
حفظ المعلومات و حمايتها
حماية السورس كود
بناء الباركود و قرائته
تحويل الملفات الي أنماط مختلفة
بناء الفونت
بناء الصور المتحركة
حماية السيريال الخاص باي برنامج
تحويل الحروف الي صور
الخطوات التالية توضح كيفية تحويل مجموعة من الحروف الي مجموعة صور
تعريف الكلمة او الحروف
Dim s As String = "omar amin"
تعريف مصفوفة الصور
Dim bitmaps As Bitmap() = New Bitmap(s.Length - 1) {}
تحويل كل حرف موجود في التكست الي صورة و ذلك باستخدام الدوال التي كتبناها
في الخلاصة أعلاه ثم نقوم بإضافة كل صورة الي مصفوفة الصور
For i As Integer = 0 To s.Length - 1
Dim c As Char = s(i)
bitmaps(i) = ConvertCharToBitmap(c)Next
وبهذا نكون حصلنا علي مجموعة صور تحتوي علي كل الحروف
تحويل الصور الي حروف مرة أخري
الخطوات التالية توضح ذلك
تعريف مصفوفة الحروف
Dim Chars As Char() = New Char(bitmaps.Length - 1) {}
قراءة كل صورة علي حده و تحويلها الي حرف ثم نضيفها الي مصفوفة الحروف
For i As Integer = 0 To bitmaps.Length - 1
Dim c As Char = ConvertBitmapToChar(bitmaps(i))
Chars(i) = c
Next
تحويل الحروف الي كلمة مرة أخري
Dim result As String = ""
For j As Integer = 0 To Chars.Length - 1
result += Chars(j)Next
خلاصة المرحلة الثانية هي الدوال التالية التي يجب ان يتم استخدامها مع الدوال الخاصة بالمرحلة الأولي
Private Function ConvertBitmapsToChars(bitmaps As Bitmap()) As Char()
Dim Chars As Char() = New Char(bitmaps.Length - 1) {}
SyncLock Chars
For i As Integer = 0 To bitmaps.Length - 1
Dim c As Char = ConvertBitmapToChar(bitmaps(i))
Chars(i) = c
Next
End SyncLock
Return Chars
End Function
Private Function ConvertStringToBitmaps(s As String) As Bitmap()
Dim bitmaps As Bitmap() = New Bitmap(s.Length - 1) {}
SyncLock bitmaps
For i As Integer = 0 To s.Length - 1
Dim c As Char = s(i)
bitmaps(i) = ConvertCharToBitmap(c)
Next
End SyncLock
Return bitmaps
End Function
و الكود التالي يوضح كيفية استخدام الدوال أعلاه
Dim s As String = "omar amin"
Dim bitmaps As Bitmap() = ConvertStringToBitmaps(s)
Dim chars As Char() = ConvertBitmapsToChars(bitmaps)
Dim result As String = ""
For j As Integer = 0 To chars.Length - 1
result += chars(j)
Next
Me.Text = result
الكلاسان التاليان هما خلاصة الجزء الأول و الثاني حيث أن احدالكلاسان يستخدم في اخفاء التكست
و الكلاس الاخر يستخدم في اظهاره مرة ثانية
و الكلاسان تم كتابتهما بأسلوب يضمن عدم وجود خطأ أثناء التنفيذ طبعا هذا في حالة أنه لم يتم تمرير بيانات بشكل صحيح
و الكلاس الاخر يستخدم في اظهاره مرة ثانية
و الكلاسان تم كتابتهما بأسلوب يضمن عدم وجود خطأ أثناء التنفيذ طبعا هذا في حالة أنه لم يتم تمرير بيانات بشكل صحيح
Public Class DataHide
Private _lock As Object = New Object()
Private _text As String
Public Sub New()
End Sub
Public Sub Hide(s As String)
SyncLock _lock
Me._text = s
End SyncLock
End Sub
Public Function Hide() As Bitmap()
Dim result As IEnumerable(Of Bitmap) = Nothing
SyncLock _lock
result = If(_text IsNot Nothing, ConvertStringToBitmaps(_text), New Bitmap() {})
End SyncLock
Return result
End Function
Private Function ConvertStringToBitmaps(s As String) As Bitmap()
Dim bitmaps As Bitmap() = New Bitmap(s.Length - 1) {}
SyncLock bitmaps
For i As Integer = 0 To s.Length - 1
Dim c As Char = s(i)
bitmaps(i) = ConvertCharToBitmap(c)
Next
End SyncLock
Return bitmaps
End Function
Private Function ConvertCharToBitmap(chr As Char, Optional w As Integer = 2, Optional h As Integer = 2) As Bitmap
Dim bmp As Bitmap = New Bitmap(w, h)
Using g As Graphics = Graphics.FromImage(bmp)
g.Clear(Color.FromArgb(Convert.ToByte(chr), 0, 0, 0))
End Using
Return bmp
End Function
End Class
Private _lock As Object = New Object()
Private _text As String
Public Sub New()
End Sub
Public Sub Hide(s As String)
SyncLock _lock
Me._text = s
End SyncLock
End Sub
Public Function Hide() As Bitmap()
Dim result As IEnumerable(Of Bitmap) = Nothing
SyncLock _lock
result = If(_text IsNot Nothing, ConvertStringToBitmaps(_text), New Bitmap() {})
End SyncLock
Return result
End Function
Private Function ConvertStringToBitmaps(s As String) As Bitmap()
Dim bitmaps As Bitmap() = New Bitmap(s.Length - 1) {}
SyncLock bitmaps
For i As Integer = 0 To s.Length - 1
Dim c As Char = s(i)
bitmaps(i) = ConvertCharToBitmap(c)
Next
End SyncLock
Return bitmaps
End Function
Private Function ConvertCharToBitmap(chr As Char, Optional w As Integer = 2, Optional h As Integer = 2) As Bitmap
Dim bmp As Bitmap = New Bitmap(w, h)
Using g As Graphics = Graphics.FromImage(bmp)
g.Clear(Color.FromArgb(Convert.ToByte(chr), 0, 0, 0))
End Using
Return bmp
End Function
End Class
Public Class DataHideReader
Private _lock As Object = New Object()
Private _bitmaps As Bitmap()
Public Sub New()
End Sub
Public Sub Read(values As Bitmap())
SyncLock _lock
Me._bitmaps = values
End SyncLock
End Sub
Public Function Read() As Char()
Dim result As IEnumerable(Of Char) = Nothing
SyncLock _lock
result = If(_bitmaps IsNot Nothing, ConvertBitmapsToChars(_bitmaps), New Char() {})
End SyncLock
Return result
End Function
Private Function ConvertBitmapsToChars(bitmaps As Bitmap()) As Char()
Dim Chars As Char() = New Char(bitmaps.Length - 1) {}
SyncLock Chars
For i As Integer = 0 To bitmaps.Length - 1
Dim c As Char = ConvertBitmapToChar(bitmaps(i))
Chars(i) = c
Next
End SyncLock
Return Chars
End Function
Private Function ConvertBitmapToChar(bmp As Bitmap, Optional x As Integer = 1, Optional y As Integer = 1) As Char
Return CType(Convert.ToChar(bmp.GetPixel(x, y).A), Char)
End Function
End Class
الكود التالي يوضح كيفية استخدام الكلاسان معا
Dim s As String = "Omar Amin"
' convert string to Bitmaps
Dim dh As New DataHide()
dh.Hide(s)
Dim bitmaps As Bitmap() = dh.Hide()
' Convert Bitmaps to Chars
Dim dhReader As New DataHideReader
dhReader.Read(bitmaps)
Dim chars As Char() = dhReader.Read
' Get the result
Dim result As String = ""
For j As Integer = 0 To chars.Length - 1
result += chars(j)
Next
Me.Text = result
' convert string to Bitmaps
Dim dh As New DataHide()
dh.Hide(s)
Dim bitmaps As Bitmap() = dh.Hide()
' Convert Bitmaps to Chars
Dim dhReader As New DataHideReader
dhReader.Read(bitmaps)
Dim chars As Char() = dhReader.Read
' Get the result
Dim result As String = ""
For j As Integer = 0 To chars.Length - 1
result += chars(j)
Next
Me.Text = result
Comments
Post a Comment