مقدمة إلي إخفاء المعلومات - الجزء الثاني

في هذا الجزء من موضوع مقدمة إلي إخفاء المعلومات
سنوضح و بطريقة مبسطة كيف يمكن تحويل تكست او مجموعة من الحروف الي مجموعة من الصور ثم نوضح الكيفية التي من الممكن بها استرداد هذه الحروف مرة أخري  من تلك الصور

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

  حفظ المعلومات و حمايتها
حماية السورس كود
بناء الباركود و قرائته
تحويل الملفات الي أنماط مختلفة
بناء الفونت
بناء الصور المتحركة
حماية السيريال الخاص باي برنامج

تحويل الحروف الي صور
الخطوات التالية توضح كيفية تحويل مجموعة من الحروف الي مجموعة صور 
تعريف الكلمة او الحروف
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(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

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
 



Comments

Popular posts from this blog

مقدمة الي تشفير الحروف الأبجدية العربية

VB.NET Translucent Control using GDI+

Add Custom Event to a Class in VB.NET