บทความทั้งหมด

Base64: การเข้ารหัสมีไว้ทำไมและทำงานอย่างไร

Base64 คือวิธีการแสดงข้อมูลไบนารีใด ๆ ให้เป็นข้อความที่ประกอบด้วยตัวอักษร ตัวเลข และสัญลักษณ์ +, /, = เท่านั้น มันไม่ได้บีบอัดหรือเข้ารหัสลับข้อมูล — ผลลัพธ์จะมีขนาดใหญ่ขึ้นประมาณหนึ่งในสาม และใครก็ตามที่รู้อัลกอริทึมสามารถอ่านเนื้อหาต้นฉบับได้

การเข้ารหัสทำงานอย่างไร

ไบต์ที่ป้อนเข้ามาจะถูกจัดกลุ่มทีละสามไบต์ (24 บิต) และแบ่งเป็นสี่บล็อกบล็อกละหกบิต แต่ละบล็อกจะสอดคล้องกับตัวอักษรหนึ่งตัวจากชุดตัวอักษร Base64 (A–Z, a–z, 0–9, +, /) หากความยาวของข้อมูลที่ป้อนเข้ามาไม่ใช่จำนวนเท่าของสามไบต์ จะมีการเติมอักขระ = ไว้ท้ายสุด

เหตุใดจึงจำเป็น

โปรโตคอลและรูปแบบจำนวนมาก — อีเมล (MIME), URL, JSON, XML — ถูกออกแบบมาสำหรับข้อความและไม่สามารถจัดการไบต์ "ดิบ" ได้อย่างน่าเชื่อถือ เช่น ไบต์ศูนย์ อักขระควบคุม หรือลำดับที่ขัดแย้งกับไวยากรณ์ของรูปแบบเอง Base64 หลีกเลี่ยงข้อจำกัดนี้โดยเปลี่ยนข้อมูลไบนารีใด ๆ ให้เป็นข้อความที่ปลอดภัย

กรณีการใช้งานทั่วไป

  • ไฟล์แนบอีเมลผ่าน MIME
  • ส่งรูปภาพหรือไฟล์ขนาดเล็กใน JSON API
  • เก็บข้อมูลไบนารีในฟิลด์ข้อความของฐานข้อมูลหรือไฟล์คอนฟิก
  • เข้ารหัสส่วน header และ payload ของ JWT

สิ่งที่ Base64 ไม่ใช่

มันไม่ใช่การเข้ารหัสลับหรือการแฮช ใครก็ตามสามารถถอดรหัสสตริง Base64 กลับเป็นข้อมูลต้นฉบับได้โดยไม่ต้องใช้คีย์หรือรหัสผ่าน — มันเป็นเพียงรูปแบบการแสดงผล ไม่ใช่มาตรการด้านความปลอดภัย

ชุดอักขระมาตรฐานกับ URL-safe

ชุดอักขระ Base64 แบบคลาสสิกใช้สัญลักษณ์ + และ / ซึ่งมีความหมายพิเศษใน URL และชื่อไฟล์ สำหรับกรณีเหล่านี้จึงมีตัวแปร Base64URL ที่แทน + ด้วย - และแทน / ด้วย _ หากนำผลลัพธ์จากการเข้ารหัสแบบมาตรฐานไปใส่ใน URL โดยไม่ทำ percent-encoding เพิ่มเติม สัญลักษณ์ + และ / อาจทำให้ที่อยู่ผิดเพี้ยนหรือขัดแย้งกับตัวคั่นของเส้นทาง

ข้อผิดพลาดที่พบบ่อย: padding ถูกตัดหรือ "เสีย"

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

ลองใช้เครื่องมือ