รหัส Base64 เป็นรหัสที่ถือกำเนิดขึ้นมาด้วยจุดประสงค์ที่จะแก้ไขปัญหาในเรื่องของการส่งไฟล์ข้อมูลแบบไบนารี่ไปพร้อมกับอีเมล์ที่เก็บข้อมูลแบบตัวอักษรเท่านั้น ซึ่งด้วยโปรโตคอลแบบ SMTP ที่ใช้สำหรับการส่งอีเมล์นั้น สนับสนุนเฉพาะกับการส่งข้อมูลแบบอักขระแบบธรรมดาอย่างเช่น ตัวอักษร ABC เลข 123 หรือรหัสอักษรแบบยูนิโค้ดแบบภาษาไทย ก ข ค ง เท่านั้น
แล้วจะทำยังไงให้ส่งไฟล์ข้อมูลแบบไบนารี่ไปกับอีเมล์ได้ล่ะ คำตอบก็คือการเข้ารหัสข้อมูลไฟล์ไบนารี่ด้วยรหัส Base64 ซึ่งรหัสดังกล่าวจะใช้อัลกอริทึมที่สามารถแปลงข้อมูลไบนารี่ที่มีความยาวข้อมูลขนาด 8 บิต ให้ลดลงเหลือแค่ 6 บิต แล้วเอาบิต 2 ตัวท้ายสุดที่ตัดออกไปต่อเป็นบิต 2 ตัวแรกของข้อมูลชุดถัดไป ทำแบบนี้เป็นกระบวนการต่อเรื่อยไป จนกระทั่งครบจำนวนข้อมูลทั้งหมด
ซึ่งจะทำให้ข้อมูลแบบไบนารี่กลายไปเป็นข้อมูลแบบตัวอักษรอย่างเช่น AJHAH123135JB1AS125ADS8 อะไรประมาณนี้ แต่มีข้อเสียอยู่นิดหน่อยในการเข้ารหัสแบบ BASE64 เนื่องจากมีการตัดบิตและเลื่อนลำดับบิดภายในชุดข้อมูล จึงทำให้ขนาดของข้อมูลไบนารี่ที่ถูกเข้ารหัส BASE64 จะมีขนาดของข้อมูลที่ใหญ่ขึ้นกว่าขนาดเดิมที่เป็นไฟล์ไบนารี่พอสมควร
ดังนั้น ในบางครั้งเราจะสังเกตุได้ว่าเวลาที่เราแนบไฟล์ไปกับอีเมล์ทั้งๆ ทีไฟล์ก็อาจจะมีขนาดเพียงไม่กี่ MB แต่ก็ต้องใช้เวลานานในการแนบไฟล์และส่งเมล์ ก็ด้วยเหตุที่ระบบต้องทำการเข้ารหัสข้อมูลไฟล์เป็นรหัส BASE64 ก่อนนี่แหละครับ แถมด้วยขนาดของข้อมูลที่ใหญ่โตมากขึ้นกว่าเดิมก็ยิ่งทำให้เสียเวลาส่งมากขึ้นไปอีก
555 เกริ่นนำกันเสียนาน มาเข้าเรื่องกันเลยดีกว่า ก่อนอื่นก็ต้องเตรียมเครื่องมือให้พร้อมครับ คือ โปรแกรม Visual Basic 2008 หรือ 2005 ก็ได้ จากนั้นก็เปิดโปรเจ็กใหม่ขึ้นมา เมื่อเจอหน้าฟอร์มว่างๆ ก็วาง Textbox ลงไปซักอันนึง ตามด้วยวาง Textbox อีกตัวแต่ตัวนี้เลือก Property ค่า Multiline ให้เป็น True เพื่อให้แสดงข้อความแบบหลายบรรทัดได้ แล้วจบท้ายด้วยวางปุ่มลงบไปหนึ่งปุ่มเอาไว้ออกคำสั่งให้เข้ารหัสข้อมูล
ส่วนหลักการทำงานก็จะเริ่มจากการเปิดไฟล์ข้อมูลแบบไบนารี่ออกมา แล้วเอาไปเก็บเอาไว้ในตัวแปรแบบไบต์ จากนั้นก็นำค่าข้อมูลในตัวแปรไปเข้ารหัสด้วยฟังก์ขั่นที่มีคำสั่งเพียงบรรทัดเดียว แล้วเราก็จะได้รหัส BASE64 ของไฟล์ไบนารี่ออกมาแล้ว ง่ายสุดๆ ส่วนโค้ดก็ตามนี้เลยครับ
Imports System.IO
Public Class Form1
Dim aDataBuffer As String
Function EncodeBase64(ByVal aData() As Byte) As String
If aData Is Nothing Then
Throw New ArgumentNullException("Can not convert")
End If
Return Convert.ToBase64String(aData)
End Function
Private Sub CmdEncode_Click_1(ByVal sender As System.Object,_
ByVal e As System.EventArgs) Handles CmdEncode.Click
Dim aReadBuff As Byte()
Dim aBase64 As String
If TxOpen.Text <> "" Then
aDataBuffer = ""
TxBase64.Clear()
aReadBuff = File.ReadAllBytes(TxOpen.Text)
aBase64 = EncodeBase64(aReadBuff)
TxBase64.Text = aBase64
aDataBuffer = aBase64
TxOpen.Clear()
End If
End Sub
End Class
โปรแกรมนี้เพียงเรากรอกชื่อไฟล์และพาร์ท เช่น C:\Test.mp3 เข้าไป แล้วกดที่ปุ่ม Encode รหัส BASE64 ของไฟล์ Test.mp3 ก็จะถูกแสงดออกมาทันทีที่ Textbox ตัวล่าง แล้วสำหรับใครที่อยากได้โค้ดของโปรแกรมก็ดาวน์โหลดไปได้เลยครับ ซึ่งแนบไปกับกระทู้นี้แล้ว เป็นโค้ดโปรแกรมภาษา VB 2008 ครับ (ปล. ถ้า VB 2008 ไม่มีฟังก์ชั่นสำหรับรหัส BASE64 เนี่ย ต้องเขียนฟังก์ชั่นอัลกอริทึมรหัส BASE64 กันสนุกสนานแน่นอนครับ)
และบทความนี้ผมตัดออกมาบางส่วนจากบทความของผมเองในนิตยสาร Computer Today ซึ่งยังมีภาคต่อครับ สำหรับในส่วนของการถอดรหัส BASE64 กลับไปเป็นไฟล์ไบนารี่ ขอติดเอาไว้ต่อในตอนหน้าครับ