Base64 คืออะไร?
วิธีเข้ารหัสข้อมูลไบนารีเป็น ASCII โดยใช้ 64 ตัวอักษร
เข้ารหัสและถอดรหัส Base64
วิธีเข้ารหัสข้อมูลไบนารีเป็น ASCII โดยใช้ 64 ตัวอักษร
เพื่อส่งข้อมูลไบนารีอย่างปลอดภัยในรูปแบบข้อความเช่น อีเมล JSON HTML
ใช่ ใหญ่ขึ้นประมาณ 33%
Base64 เอาข้อมูลไบนารี -- อะไรที่คอมพิวเตอร์ชอบแต่ระบบข้อความรับไม่ได้ -- แปลงเป็นตัวอักษร ASCII ธรรมดา เจอได้ทุกที่เลย: ไฟล์แนบอีเมล รูปภาพฝังใน HTML โทเค็นยืนยันตัวตน API ถ้าเคยเห็นสตริงยาวๆ ที่ดูเหมือนตัวอักษรสุ่มๆ ลงท้ายด้วย "==" นั่นแหละ Base64
ใช่ ใหญ่ขึ้นประมาณ 33% ข้อตกลงตรงไปตรงมา: ข้อมูลต้นฉบับทุก 3 ไบต์จะกลายเป็น 4 ตัวอักษร ASCII คุณได้ความเข้ากันได้ (ใช้ได้ทุกที่ที่ส่งข้อความได้) แต่เสียประสิทธิภาพเรื่องขนาดไฟล์ไปบ้าง
Base64 หยิบข้อมูล 3 ไบต์ (24 บิต) แล้วหั่นเป็นสี่กลุ่มๆ ละ 6 บิต แต่ละกลุ่ม 6 บิตจะจับคู่กับหนึ่งใน 64 ตัวอักษร: A ถึง Z, a ถึง z, 0 ถึง 9, บวก (+) และ สแลช (/) ถ้าข้อมูลหารด้วย 3 ไม่ลงตัว ก็จะมีตัวอักษร "=" เติมท้าย ผลลัพธ์? ข้อมูลไบนารีอะไรก็ตาม ไม่ว่ารูปภาพ ไฟล์ อะไรก็ได้ กลายเป็นข้อความที่ปลอดภัยและพิมพ์ได้
อีเมลคือ use case แรกสุด -- MIME encoding ใช้ Base64 เปลี่ยนไฟล์แนบเป็นข้อความที่ผ่านเซิร์ฟเวอร์อีเมลได้ นักพัฒนาเว็บใช้มันฝังรูปภาพเล็กๆ ใน CSS หรือ HTML ผ่าน data URI ประหยัด HTTP request ไปหนึ่งครั้ง ถ้าเคยตั้งค่า API authentication ด้วย Basic Auth ก็กำลัง Base64 เข้ารหัส username กับ password อยู่นะ นอกจากนี้ยังโผล่ขึ้นมาทุกครั้งที่ต้องยัดข้อมูลไบนารีเข้า JSON, XML หรือ format ข้อความอะไรก็ตาม
ขนาดที่เพิ่มขึ้น 33% ของ Base64 คือราคาที่จ่ายเพื่อรองรับได้เกือบทุกที่ Base32 เพิ่ม overhead เป็น 60% แต่ไม่สนตัวพิมพ์ใหญ่เล็ก ซึ่งช่วยได้ในบาง case Hex encoding ทำให้ข้อมูลใหญ่ขึ้นเท่าตัว แต่อ่านง่ายสุดตอนดีบัก ยังมี URL-safe Base64 ที่สลับ + กับ / เป็น - กับ _ เพื่อไม่ให้ข้อมูลที่เข้ารหัสทำ URL พัง เลือกอันที่เหมาะกับที่ข้อมูลจะไปและขนาดสำคัญแค่ไหน