Base64 คืออะไร ใช้ทำอะไรได้บ้าง — เข้าใจในไม่กี่นาที

Base64 คืออะไร ใช้ทำอะไรได้บ้าง — เข้าใจในไม่กี่นาที

ถ้าเคยเห็นสตริงตัวอักษรแปลกๆ อย่าง SGVsbG8gV29ybGQ= หรือ eyJhbGciOiJIUzI1NiJ9 ในโค้ด ใน URL หรือในค่า config ของแอป สิ่งที่เห็นนั้นคือ Base64 — รูปแบบการแปลงข้อมูลไบนารีให้กลายเป็นข้อความที่ระบบต่างๆ ส่งผ่านกันได้โดยไม่เสียหาย

บทความนี้อธิบายว่า Base64 คืออะไร ทำงานอย่างไร ใช้ในสถานการณ์ไหนจริงๆ และมีข้อจำกัดอะไรที่หลายคนมักข้ามไป

Base64 คืออะไร

Base64 คือมาตรฐานการแปลงข้อมูลไบนารีให้อยู่ในรูปแบบข้อความ ASCII โดยใช้ตัวอักษรเพียง 64 ตัวที่ปลอดภัยในทุกระบบ ประกอบด้วย ตัวพิมพ์ใหญ่ A–Z, ตัวพิมพ์เล็ก a–z, ตัวเลข 0–9 และสัญลักษณ์ + กับ / รวม 64 ตัว บวกกับ = สำหรับ padding

มาตรฐานอ้างอิงคือ RFC 4648 (The Base16, Base32, and Base64 Data Encodings) จัดทำโดย IETF โดย Section 4 กำหนด Base64 มาตรฐาน และ Section 5 กำหนด Base64url ซึ่งปลอดภัยสำหรับใช้ใน URL

สิ่งสำคัญที่ต้องเข้าใจตั้งแต่ต้น: Base64 ไม่ใช่การเข้ารหัส (encryption) ใครก็ decode กลับเป็นข้อมูลต้นฉบับได้ทันที มันเป็นแค่การ “แปลงรูปแบบ” เพื่อให้ส่งผ่านระบบข้อความได้เท่านั้น

หลักการทำงานของ Base64

Base64 ทำงานโดยแปลง ทุก 3 bytes ของข้อมูลต้นฉบับให้กลายเป็น 4 ตัวอักษร Base64 ตามขั้นตอนนี้

3 bytes = 24 bits → แบ่งออกเป็น 4 กลุ่ม กลุ่มละ 6 bits → แปลงแต่ละกลุ่ม 6 bits เป็นตัวอักษร 1 ตัวจากตาราง 64 ตัว

ตัวอย่าง: คำว่า “Hi!” (3 ตัวอักษร = 3 bytes)

  • H = 01001000 | i = 01101001 | ! = 00100001
  • นำ 24 bits มาเรียงต่อกัน → แบ่งเป็น 4 กลุ่ม 6 bits
  • 010010 000110 100100 100001 → ตรงกับ S, G, k, h
  • ผลลัพธ์: SGkh

ถ้าข้อมูลต้นฉบับไม่ได้เป็นทวีคูณของ 3 bytes พอดี จะมีการเติม padding ด้วยตัวอักษร = หนึ่งหรือสองตัวท้ายผลลัพธ์ เช่น SGVsbG8= (ตัว = ท้ายบอกว่ามีข้อมูลเหลือ 2 bytes ในกลุ่มสุดท้าย)

ขนาดไฟล์เพิ่มขึ้น 33% เสมอ

เพราะทุก 3 bytes กลายเป็น 4 ตัวอักษร อัตราส่วนคือ 4÷3 ≈ 1.333 ข้อมูล Base64 จึงมีขนาดใหญ่กว่าต้นฉบับประมาณ 33% เสมอ — ไม่ว่าจะเป็นไฟล์ประเภทใดก็ตาม นี่คือข้อจำกัดพื้นฐานที่ต้องรู้ก่อนตัดสินใจใช้ Base64

Base64url คืออะไร

นอกจาก Base64 มาตรฐาน ยังมีรูปแบบ Base64url ที่แตกต่างเล็กน้อย โดยแทนที่

  • +-
  • /_

เหตุผลคือ + และ / มีความหมายพิเศษใน URL ทำให้ผลลัพธ์ Base64 ปกติใช้ใน URL โดยตรงไม่ได้ Base64url แก้ปัญหานี้โดยไม่ต้อง URL encode ก่อน และใช้อย่างแพร่หลายใน JWT token ซึ่งจะอธิบายต่อไป

การใช้งาน Base64 จริงในชีวิต

1. อีเมล Attachment

นี่คือที่มาดั้งเดิมของ Base64 โปรโตคอล SMTP (Simple Mail Transfer Protocol) ที่ใช้ส่งอีเมลถูกออกแบบมาตั้งแต่ปี 1982 รองรับเฉพาะตัวอักษร ASCII 7 bit เท่านั้น ไม่สามารถส่งข้อมูลไบนารีอย่างรูปภาพหรือไฟล์ PDF ได้โดยตรง

มาตรฐาน MIME (Multipurpose Internet Mail Extensions) จึงนำ Base64 มาใช้เป็น encoding มาตรฐานสำหรับ attachment ทุกประเภท โปรแกรมอีเมลทุกตัวยังคงใช้วิธีนี้จนถึงปัจจุบัน ทุกครั้งที่แนบ PDF หรือรูปภาพไปในอีเมล ไฟล์นั้นถูก encode เป็น Base64 ก่อนส่ง

2. Data URI ฝังรูปใน HTML/CSS

Data URI คือเทคนิคฝังข้อมูลไฟล์ไว้โดยตรงในโค้ด HTML หรือ CSS โดยไม่ต้องโหลดไฟล์แยกต่างหาก รูปแบบคือ

data:[mediatype];base64,[ข้อมูล Base64]

ตัวอย่างเช่น <img src="data:image/png;base64,iVBORw0KGgo...">

ประโยชน์คือลดจำนวน HTTP request สำหรับไฟล์เล็กๆ อย่างไอคอน SVG หรือ loading spinner แต่ไม่เหมาะกับรูปขนาดใหญ่ เพราะ HTML จะโตขึ้นมาก (+33%) และเบราว์เซอร์ไม่สามารถ cache ข้อมูลส่วนนั้นแยกจากหน้าเว็บได้

3. JWT Token (JSON Web Token)

JWT คือ token ที่ใช้ยืนยันตัวตนในระบบ web อย่างแพร่หลาย โครงสร้างของ JWT คือสตริง 3 ส่วนคั่นด้วยจุด

eyJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiIxMjMifQ.abc123
   [Header]           [Payload]              [Signature]

แต่ละส่วนคือ Base64url ของ

  • Header — ชนิด token และ algorithm ที่ใช้ เช่น {"alg":"HS256","typ":"JWT"}
  • Payload — ข้อมูลที่ต้องการส่ง เช่น user ID, เวลาหมดอายุ
  • Signature — ลายเซ็นที่ตรวจสอบว่า token ไม่ถูกแก้ไข

ข้อควรระวังสำคัญ: Payload ของ JWT เป็นแค่ Base64url — ไม่ได้เข้ารหัส ใครก็ decode อ่านได้ทันที ห้ามใส่ข้อมูลลับอย่าง password หรือหมายเลขบัตรเครดิตใน JWT payload เด็ดขาด

ความปลอดภัยของ JWT มาจาก Signature ส่วนที่สาม ไม่ใช่จาก encoding — ถ้าค่า Signature ไม่ตรง เซิร์ฟเวอร์จะปฏิเสธ token ทันที

4. ส่งไฟล์ผ่าน REST API (JSON Payload)

เมื่อต้องส่งไฟล์ binary (รูปภาพ, PDF, เสียง) ผ่าน REST API ที่รับเฉพาะ JSON วิธีหนึ่งคือแปลงไฟล์เป็น Base64 แล้วใส่เป็น string field

{
  "filename": "photo.jpg",
  "content_type": "image/jpeg",
  "data": "/9j/4AAQSkZJRg..."
}

สำหรับไฟล์ขนาดใหญ่กว่า 1 MB แนะนำให้ใช้ multipart/form-data แทน เพราะวิธีนี้ไม่มี overhead 33% และเซิร์ฟเวอร์ประมวลผลได้มีประสิทธิภาพกว่า

ข้อจำกัดของ Base64 ที่ต้องรู้

ขนาดไฟล์เพิ่ม 33% เสมอ

ทุกครั้งที่ encode ข้อมูล ขนาดจะใหญ่ขึ้น ~33% เสมอ สำหรับไฟล์ขนาดเล็กไม่เป็นปัญหา แต่สำหรับรูป 5 MB ที่แปลงเป็น Base64 จะได้สตริงยาวกว่า 6.6 MB ซึ่งกินแบนด์วิดธ์และหน่วยความจำมากกว่าการส่งเป็น binary ตรงๆ

ไม่ใช่ encryption ห้ามสับสน

Base64 เป็นเพียง encoding — การแปลงรูปแบบ ไม่ใช่การปกป้องข้อมูล ถ้าต้องการความปลอดภัยจริงต้องใช้ encryption อย่าง AES หรือ RSA ต่างหาก Base64 เพียงทำให้ข้อมูลดู “อ่านไม่รู้เรื่อง” แต่ decode กลับได้ทันทีโดยไม่ต้องใช้ key ใดๆ

ไม่ได้บีบอัดข้อมูล

Base64 ไม่ compress ไฟล์ ถ้าต้องการลดขนาดต้องใช้ compression แยก เช่น gzip, zstd หรือเครื่องมือบีบอัดรูปภาพของแปลงไฟล์.com

วิธีใช้เครื่องมือ Base64 Encode/Decode บนแปลงไฟล์.com

สำหรับการ encode และ decode ข้อมูล Base64 แบบง่ายๆ ไม่ต้องเขียนโค้ด ใช้เครื่องมือ Base64 Encode/Decode บนแปลงไฟล์.com ได้เลย

วิธีใช้

  1. เปิดหน้า เครื่องมือ Base64
  2. วางข้อความหรือ upload ไฟล์ที่ต้องการ encode หรือ decode
  3. กดปุ่ม Encode หรือ Decode
  4. คัดลอกผลลัพธ์ไปใช้งาน

เครื่องมือนี้ทำงานฝั่ง browser ทั้งหมด — ข้อมูลไม่ถูกส่งไปเซิร์ฟเวอร์ ใช้กับข้อมูลสำคัญได้อย่างมั่นใจ

ถ้าต้องการทำความเข้าใจข้อมูล JSON ที่มักส่งผ่านระบบ API คู่กับ Base64 อ่านต่อที่ JSON คืออะไร และทำไมโปรแกรมเมอร์ต้องจัดรูปแบบ

สำหรับไฟล์ที่ต้องการ decode จาก PDF หรือแปลงรูปแบบไฟล์ต่างๆ ดูเพิ่มเติมที่ PDF คืออะไร รู้จักไฟล์ PDF พร้อมวิธีเปิด สร้าง และแปลง และ ไฟล์ WebP คืออะไร และวิธีแปลงเป็น JPG/PNG

FAQ: คำถามที่พบบ่อยเกี่ยวกับ Base64

Q: Base64 กับ binary ต่างกันอย่างไร?
A: Binary คือข้อมูลดิบในรูป 0 และ 1 ที่คอมพิวเตอร์เก็บ Base64 คือการแปลงข้อมูล binary นั้นให้อยู่ในรูปตัวอักษรที่ระบบข้อความส่งผ่านได้โดยไม่เสียหาย

Q: decode Base64 ต้องใช้ key ไหม?
A: ไม่ต้อง Base64 ไม่มี key — ใครก็ decode กลับได้ทันที จึงไม่ควรใช้กับข้อมูลลับโดยไม่มี encryption ชั้นบน

Q: Base64url กับ Base64 มาตรฐานต่างกันอย่างไร?
A: Base64url แทนที่ + ด้วย - และ / ด้วย _ เพื่อให้ผลลัพธ์ปลอดภัยใน URL โดยไม่ต้อง percent-encode ก่อน ใช้ใน JWT เป็นหลัก

Q: ทำไม JWT ดู “ปลอดภัย” แต่ decode ได้ง่ายมาก?
A: JWT ปลอดภัยจาก Signature ส่วนที่สาม ไม่ใช่จาก encoding ถ้าค่า Signature ไม่ตรง เซิร์ฟเวอร์จะปฏิเสธ token แต่ Header และ Payload ทุกคนอ่านได้ตลอดเวลา — จึงห้ามเก็บข้อมูลลับไว้ใน JWT payload

Q: ขนาดไฟล์เพิ่ม 33% เสมอไหม?
A: ใช่ ไม่ว่าจะเป็นไฟล์ประเภทใด encoding ทุก 3 bytes → 4 chars ทำให้ขนาดเพิ่มขึ้น 33.3% เสมอ เป็นคุณสมบัติพื้นฐานที่แก้ไขไม่ได้ของ Base64

Q: ใช้ Base64 กับภาษาโปรแกรมมิ่งอะไรได้บ้าง?
A: ทุกภาษาหลักมี built-in รองรับ เช่น Python (base64 module), JavaScript (btoa()/atob() ใน browser), PHP (base64_encode()/base64_decode()), Java (java.util.Base64) และ Go (encoding/base64)

สรุป

Base64 คือมาตรฐานแปลงข้อมูล binary ให้เป็นข้อความ ASCII โดยใช้ตัวอักษร 64 ตัวตาม RFC 4648 แต่ละ 3 bytes กลายเป็น 4 ตัวอักษร ทำให้ขนาดเพิ่มขึ้น 33%

ใช้งานจริงในการส่งอีเมล attachment, ฝังรูปเป็น Data URI ใน HTML/CSS, สร้าง JWT token และส่งไฟล์ผ่าน JSON API — แต่ไม่ใช่ encryption จึงห้ามใช้แทนการรักษาความปลอดภัยข้อมูล และไม่ควรใช้กับไฟล์ขนาดใหญ่เพราะ overhead 33%

สำหรับ encode หรือ decode Base64 แบบไม่เขียนโค้ด ลองใช้เครื่องมือบนแปลงไฟล์.com ได้เลย ฟรี ไม่อัปโหลดข้อมูลไปไหน ทำงานในเบราว์เซอร์ทันที