How to encode and decode images into string by using Base64 algorithm

บทนำ (Overview)

รูปภาพต่าง ๆ ที่เราเห็นโดยทั่วไป เราสามารถเปลี่ยนเป็นข้อมูลสายอักขระในรูปแบบ “Base64” ได้ เพื่อจัดเก็บในฐานข้อมูลหรือใช้ร่วมกับการโจมตีแบบ “Cross-site scripting” ในรูปแบบของ “Phishing” ได้เช่นกัน (สามารถติดตามบทความได้ที่ How to demonstrate Phishing with Data URI)

Images (such as .bmp, .png, and .jpg) can be converted into “String” format to keep at a database. Moreover, this technique can be applied to attack the vulnerabilities of Cross-Site Scripting (XSS). You can use an image formatted into string data including JavaScript to create new Phishing links and send anyone who may have the impact. Let’s go to read more at (How to demonstrate Phishing with Data URI).


ขั้นตอน (Steps)

เปลี่ยนรูปภาพให้เป็นข้อมูลประเภทอักขระที่ถูกเข้ารหัสโดย “Base64”
Change an image into String data type by using Base64 encoder.

  1.  เรียกใช้ “Namespace System.IO”
    Calling “Namesspace” named that “System.IO”, Assembly: mscorlib – in mscorlib.dll.
Imports System.IO
  •  เรียกใช้ “Method” ที่ชื่อ “File.ReadAllBytes” [1] ในการเปิด “Binary file” เพื่ออ่านเนื้อหาของ “File”
    Calling method named that “File.ReadAllBytes” to enable “Binary file” to read a file content.

    File.ReadAllBytes(fileName)
    
  • “Convert” ข้อมูลประเภท “Bytes” ที่ได้จากการอ่านข้อมูลจากขั้นตอนก่อนหน้าให้เป็นการอักขระที่ถูก “Encode” โดยวิธี “Base64”
    When contents have already read, we can encode by Base64 algorithm.

    Convert.ToBase64String()
    

เปลี่ยนอักขระที่ถูกเข้ารหัสโดย “Base64” ให้เป็นรูปภาพ
Change Base64 string into an image.

  1. เปลี่ยนข้อมูล “String” ที่ “Encode” โดยวิธี “Base64” เป็นข้อมูลประเภท “Bytes”
    Convert the Base64 string into Byte

    Dim data() As Byte
    data = System.Convert.FromBase64String(encode)
    
  2. สร้างตัวแปรประเภท “Stream” เพื่อจัดเก็บข้อมูลใน “Memory” และสร้าง “Image” [2] จากข้อมูล “Stream” ที่จัดเก็บไว้ใน “Memory”
    From “data” variable storing the Byte data, we can convert to an image.

    Dim objByte As New MemoryStream(data)
    Return Image.FromStream(objByte)
    
  3. ตัวอย่าง Source-code
    The example of source-codes.

    Public Class encode
    
        Public Function ConvertFileToBase64(ByVal fileName As String) As String
            Return Convert.ToBase64String(File.ReadAllBytes(fileName))
        End Function
    
        Public Function ConvertBase64ToFile(ByVal encode As String) As Image
            Dim data() As Byte
            data = System.Convert.FromBase64String(encode)
            Dim objByte As New MemoryStream(data)
            Return Image.FromStream(objByte)
        End Function
    
    End Class
    

ผลการทดสอบ
Outcome

convertURI
จากการทดสอบ “Encode” จากรูปข้างต้นสามารถได้อักขระตามข้างล่าง
From our testing, we can convert the image into string and encode by using Base64 as the followings:

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

อ้างอิง (Reference)
[1]: http://msdn.microsoft.com/en-us/library/system.io.file.readallbytes%28v=vs.110%29.aspx

[2]: http://msdn.microsoft.com/en-us/library/93z9ee4x%28v=vs.110%29.aspx

ใส่ความเห็น