ถ้าคุณเคยเห็นสตริงยาวๆ ที่มีตัวอักษรแปลกๆ อย่าง SGVsbG8gV29ybGQ= นั่นแหละคือ Base64 encoding
Base64 คืออะไร
Base64 คือวิธีการ encoding ข้อมูลไบนารีให้อยู่ในรูปแบบตัวอักษร ASCII 64 ตัว ได้แก่:
- A-Z (26 ตัว)
- a-z (26 ตัว)
- 0-9 (10 ตัว)
-
- และ / (2 ตัว)
- = ใช้เป็น padding
รวมเป็น 64 ตัวอักษร จึงเรียกว่า Base64
Base64 ≠ การเข้ารหัส (Encryption)
นี่คือความเข้าใจผิดที่พบบ่อยที่สุด! Base64 ไม่ได้ ทำให้ข้อมูลปลอดภัย ใครก็ decode ได้ทันทีโดยไม่ต้องใช้ key
ตัวอย่าง: SGVsbG8= → decode → Hello
Base64 ทำงานยังไง
ข้อมูลเดิม (binary) จะถูกแบ่งเป็นกลุ่มๆ ละ 6 บิต แล้วแมปไปยังตัวอักษรใน Base64 table
ตัวอย่าง: ตัวอักษร “M” = ASCII 77 = binary 01001101
กระบวนการ encode:
- แปลง “Man” → binary bytes
- รวม 3 bytes (24 bits) → แบ่งเป็น 4 กลุ่ม ๆ ละ 6 bits
- แต่ละกลุ่ม map กับตัวอักษร Base64
- ผลลัพธ์:
TWFu
เพราะ 3 bytes → 4 ตัวอักษร ดังนั้น Base64 จึงเพิ่มขนาดข้อมูลประมาณ 33%
ใช้ตรงไหนบ้างในชีวิต Dev
1. Data URLs (Inline Images)
แทนที่จะ link ไฟล์รูปภาพ สามารถ embed รูปลงใน HTML/CSS ได้เลย:
<img src="data:image/png;base64,iVBORw0KGgo..." />
เหมาะกับ icon เล็กๆ ที่ต้องการลด HTTP requests
2. JWT (JSON Web Tokens)
ส่วน header และ payload ของ JWT ถูก encode ด้วย Base64URL (เวอร์ชันที่ใช้ - และ _ แทน + และ /)
3. Email Attachments
ระบบ email ส่งได้แค่ข้อความ MIME จึงใช้ Base64 encode ไฟล์แนบให้เป็น text ก่อนส่ง
4. Basic Authentication
HTTP header สำหรับ Basic Auth: Authorization: Basic dXNlcjpwYXNz ซึ่ง decode ได้เป็น user:pass
5. Storing Binary in JSON/XML
Database หรือ API ที่รับแค่ string อาจใช้ Base64 เก็บข้อมูล binary เช่น ไฟล์ PDF หรือรูปภาพ
Base64URL vs Base64
| ตัวอักษร | Base64 | Base64URL |
|---|---|---|
| 62 | + | - |
| 63 | / | _ |
| Padding | = | ไม่มีหรือละเว้น |
Base64URL ใช้ใน JWT, URL, filename เพราะ + และ / มีความหมายพิเศษใน URL
สรุป
Base64 คือเครื่องมือแปลงข้อมูล ไม่ใช่ความปลอดภัย ใช้เมื่อต้องการส่งข้อมูล binary ผ่านช่องทางที่รองรับแค่ text เช่น email, URL, JSON
ลองใช้ เครื่องมือแปลง Base64 ของเราได้เลย