บางอย่าง… คนสนิทกันดีเท่านั้นถึงจะเข้าใจกันได้

There is something that…. only the one who know about each other will understand.

เคยได้ยินเพลงอะไรแว่วๆ ตอนนั่งอยู่กะเพื่อน แล้วอยู่ดีๆขำป่าว???
แล้ว.. เคยนินทา คนอื่น โดยใช้แค่คำพูดพยางค์เดียว แล้วเข้าใจกันหรือเปล่า??

มันต้องเคยมั่งแหละน่า อาจจะต่างคำพูดกันไป แต่ทำไมเราถึงเข้าใจกันในทันทีหว่า?? ว่าเรากำลังพูดถึงใคร พูดถึงอะไร…

…. เราอาจจะพูดถึงคำนี้บ่อยมั้ง
…. เราอาจจะโดนแบบนี้มาบ่อยมั้ง

เราถึงเข้าใจ

หัวข้อในวันนี้ เราไม่ได้มาพูดถึงการนินทาคนอะไรเลยนะ ไม่อยากให้เข้าใจผิด วันนี้ เราจะขอขึ้นต้นด้วยข้อความที่เหมือนจะอ่านไม่ออกสั้นๆ ข้อความหนึ่ง

TWl0aFRhUGFyYi1LYXJuUHJvZ3JhbQ==

ผมมีคำถามครับ.. ใครงงว่าไอ้เจ้านี่คืออะไรบ้าง มายกมือหน่อย

ไหนใครเข้าใจบ้างมายกมือหน่อย… อย่างนั้นแหละครับ

ผมไม่เห็นหรอก 5555

ผมถามต่อคนที่เห็นแล้วรู้เลยบ้างนะครับ แล้วทำไมถึงรู้ว่ามันคืออะไร??
เพราะว่ามันมีสัญลักษณ์ที่สือถึงมันใช่มั้ยครับ นี่ไง

… เราอาจจะเห็นสิ่งนี้บ่อยไง :)
… นี่แหละที่บอกว่า คนเราถ้าเกิดเห็นมันบ่อย อยู่กับมันเยอะๆ เห็นปุ๊บหรือพูดถึงปุ๊บก็จะเข้าใจทันที

ผมขออนุญาติเฉลยเลยเนอะ สิ่งนี้เขาเรียกว่า base64 ครับ
ต่อไป ผมขออนุญาติถ่ายทอดความรู้เรื่องนี้นะครับ เผื่อใครก็ตามที่เห็นมัน จะได้เข้าใจมันต่อไปเนอะ

**WARNING***
เนื้อหาที่จะเขียนต่อไป มีเลขฐาน2 อีกแล้ว ซับซ้อนสำหรับมือใหม่ ใครไม่เชี่ยวชาญเลขฐาน 2 ลองไปศึกษาซะหน่อยเนอะ

Base64 คืออะไร

Base64 คือการแปลงข้อมูลจากรูปแบบหนึ่ง ไปยังรูปแบบอีกรูปแบบหนึ่ง (Encode) เพื่อที่นำข้อมูลที่ถูกแปลงไปนั้น ไปใช้อย่างอื่นต่อไป

เช่น ระบบหลายๆระบบนั้น ยังไม่สามารถรองรับ unicode ได้ (อ่านภาษาหรือ font ไม่ออก) เราจำเป็นที่จะต้องแปลงจาก unicode ไปในรูปแบบของ base64 ก่อน แล้วค่อยเอาไปทำอย่างอื่น

เอ แล้วมันทำงานยังไงน้าา….

ได้ๆ เดี๋ยวผมจะสอนแปลงไปแปลงกลับละกัน หายใจเข้าลึกๆนะครับ 55555555

ฮึ้บบบบบบบบ อ่าาาาาาาาาห์

Base64 Encoding Step

  1. เพื่อนๆลองเลือกคำที่จะมา Encode ไปพร้อมกับเราก่อนเลยครับ ผมเลือกได้แล้วนะ ผมจะลองเลือกคำนี้ครับ : Mnosukk
  2. แปลงตัวอักษรแต่ละตัวให้อยู่ในรูปของ ASCII code ครับ (ASCII code คือตารางที่เอาไว้เปลี่ยนตัวอักษรภาษาอังกฤษเป็นตัวเลขครับ คอมพิวเตอร์เนี่ย เข้าใจตารางนี้อยู่แล้ว คือมัน fix เลยว่าตัวอักษรไหนคือเลขอะไร เราเป็นคนเราก็แปลงตามคอมให้ถูกนะครับ 555)
Fig 2.1 ASCII Table (Source : www.asciitable.com)

M => 77
n => 110
0 => 111
s => 115
u => 117
k => 107
k => 107

3. แปลงพวกมันเป็นเลขฐาน 2. โดยเขียนให้เต็ม 8 bit และเขียนต่อๆกันซะ

M => 77 => 01001101
n => 110 => 01101110
0 => 111 => 01101111
s => 115 => 01110011
u => 117 => 01110101
k => 107 => 01101011
k => 107 => 01101011

ถ้าเขียนรวมกันเป็น binary stream ก็คงจะ
01001101011011100110111101110011011101010110101101101011

4. นำเลขที่ได้ แบ่งทีละ 6 bit และแปลงเป็นเลขฐาน 10 ถ้าเกิดเลขชุดสุดท้ายครบ 6 bit ไม่ต้องทำอะไร แต่ถ้าเลขสุดท้ายไม่ครบ 6 bit ให้ทำการ padding(เติมให้เต็ม) ด้วยเลข 0 ซะ

010011 010110 111001 101111 011100 110111 010101 101011 011010 110000
(ไอ้ตัวหนาคือโดน padding นะครับ)

5. ให้นำเลขพวกนี้ แปลงกลับมาเป็นเลขฐาน 10 ทีละ 6 bit อย่างที่แยกไว้นี่แหละ

010011 => 19
010110 => 22
111001 => 57
101111 => 47
011100 => 28
110111 => 55
010101 => 21
101011 => 43
011010 => 26
110000 => 48

มาถึงตรงนี้เราจะได้เลขฐาน 10 มาชุดนึงเนอะ…. ถ้าคิดตามถูก น่าจะได้ตามข้างบนนี้นะครับเพื่อนๆ

6. เอาเลขฐาน 10 ที่แปลงได้ ไปแปลงเป็นตัวอักษร ตามตารางที่จะให้ข้างล่างนี้ครับผม

Fig 2.2 Base64 conversion table

ดังนั้น เราจึงทำการแปลงจากเลขฐาน 10 เป็นตัวอักษรได้อย่างนี้

19 => T
22 => W
57 => 5
47 => v
28 => c
55 => 3
21 => V
43 => r
26 => a
48 => w

7. ขั้นตอนสุดท้ายครับ จำขั้นตอนที่ 4 ได้มั้ย?? ที่เราแยกเลขฐาน 2 ที่เรียงต่อกัน ชุดละ 6 ตัวเนอะ

แล้วมันอาจจะเหลือกลุ่มสุดท้ายเนอะ ที่อาจไม่ครบ 6 ตัว…. แต่ว่า มันก็จะเป็นไปได้แค่ว่า เหลือ 2 ตัว เหลือ 4 ตัว หรือไม่เหลือเลย

อย่างในกรณีตัวอย่างนี้ เราเหลือ 2 ตัวเนอะ เราจึงเติม 0 ไป 4 ตัวให้ครบ 6 ตัว

‘จำไว้ว่า ถ้าเติม 0 จำนวน 2 ตัว ให้ใส่ ตัวเท่ากับ = ต่อท้าย base64 ที่เราคิดได้ 1 ตัว’

ดังนั้น ผลลัพธ์ของ base64 ของ Mnosukk ก็คือ TW5fc3Vraw== นั่นเอง

อ่ะ ตรวจคำตอบ

Fig 2.3 แสดงการ encode ด้วย base 64 ผ่านเว็บไซต์ นี้

วิธี decode นี่ก็คือการทำย้อนกลับจาก step7 ไป 1 แหละ ลองทำดูนะครับ ถ้าไม่รู้จะถอดรหัสคำไหน ลองคำแรกสุดที่ผมพูดถึงดูละกัน ว่าผมพูดคำว่าอะไร อิอิ

สุดท้ายนี้

อย่างที่บอกว่า คนที่รู้อ่ะ มองแว๊บเดียวก็รู้แล้ว ว่ามันคือ base64 เพราะฉะนั้น อย่า!!!! นำ base64 ไปใช้ในการเก็บรหัสผ่านนะครับ มันไม่ได้ช่วยให้ความลับนั้นมันเป็นความลับเลยยยยย อิอิ