Base64 ในประโยคเดียว
Base64 คือการเข้ารหัสข้อมูลไบนารีเป็นข้อความตามมาตรฐาน RFC 4648 ซึ่งแทนข้อมูลทุก 3 ไบต์ด้วยอักขระ 4 ตัวจากชุดตัวอักษร A–Z, a–z, 0–9, + และ /
ทำไมต้องมี Base64
ระบบจำนวนมากถูกออกแบบมาให้รองรับเฉพาะข้อความ เช่น อีเมล (SMTP), JSON, XML, แอตทริบิวต์ HTML, URL และเทอร์มินัล ข้อมูลไบนารีดิบอย่างรูปภาพหรือ PDF อาจมีไบต์ที่ระบบเหล่านี้เปลี่ยนแปลงหรือปฏิเสธ Base64 จึงแปลงข้อมูลให้เป็นอักขระที่พิมพ์ได้และปลอดภัย เพื่อให้ข้อมูลไปถึงปลายทางโดยไม่ถูกเปลี่ยนแปลง
การเข้ารหัส Base64 ทำงานอย่างไร ทีละขั้นตอน
- นำไบต์ของข้อมูลเข้า:
M,a,n= 77, 97, 110 - เขียนเป็น 24 บิต:
01001101 01100001 01101110 - แบ่งบิตออกเป็น 4 กลุ่ม กลุ่มละ 6 บิต:
010011 010110 000101 101110= 19, 22, 5, 46 - เทียบตัวเลขแต่ละตัวกับชุดตัวอักษร: 19 =
T, 22 =W, 5 =F, 46 =u
ดังนั้น Man จึงกลายเป็น TWFu ส่วนการถอดรหัสก็เพียงทำขั้นตอนเหล่านี้ย้อนกลับ
ชุดตัวอักษรของ Base64
| ค่า | อักขระ |
|---|---|
| 0–25 | A–Z |
| 26–51 | a–z |
| 52–61 | 0–9 |
| 62 | + (แบบปลอดภัยสำหรับ URL: -) |
| 63 | / (แบบปลอดภัยสำหรับ URL: _) |
| ตัวเติม (padding) | = |
เครื่องหมาย = (padding) หมายถึงอะไร
เมื่อความยาวของข้อมูลเข้าไม่ใช่ผลคูณของ 3 กลุ่มสุดท้ายจะถูกเติมให้ครบและทำเครื่องหมายด้วย = เช่น Ma กลายเป็น TWE= และ M กลายเป็น TQ== ในสตริงที่ถูกต้อง padding จะไม่ปรากฏอยู่ตรงกลางสตริงเลย
รูปแบบต่าง ๆ ของ Base64
- Base64 มาตรฐาน (RFC 4648) – ใช้ชุดตัวอักษรด้านบนพร้อม padding
= - Base64URL – ใช้
-และ_และมักไม่มี padding ใช้ใน URL ชื่อไฟล์ และ JWT - MIME Base64 – ใช้ชุดตัวอักษรมาตรฐานโดยขึ้นบรรทัดใหม่ทุก 76 อักขระ ใช้ในอีเมล
Base64 ไม่ใช่การเข้ารหัสลับ
Base64 ไม่ได้ซ่อนอะไรเลย ใครก็ถอดรหัสได้ในทันที หลายคนเข้าใจผิดว่าเป็นการป้องกันข้อมูลเพราะผลลัพธ์ดูเหมือนตัวอักษรสุ่ม สำหรับข้อมูลลับให้ใช้การเข้ารหัสลับจริง ๆ เช่น AES และใช้ Base64 เพียงเพื่อส่งไบต์ที่เข้ารหัสลับแล้วในรูปข้อความเท่านั้น
ขนาดที่เพิ่มขึ้น
ความยาวหลังเข้ารหัสคือ 4 × ⌈n / 3⌉ อักขระสำหรับข้อมูล n ไบต์ หรือมากกว่าต้นฉบับประมาณ 33% หากขึ้นบรรทัดแบบ MIME จะเพิ่มขึ้นอีก 2–3%
Base64 ใช้ที่ไหนบ้าง
- ไฟล์แนบในอีเมล (MIME)
- Data URI สำหรับรูปภาพและฟอนต์ใน HTML และ CSS
- ฟิลด์ข้อมูลไบนารีใน API แบบ JSON และ XML
- JSON Web Token และ OAuth
- ส่วนหัว HTTP Basic authentication
- ใบรับรอง PEM และคีย์ SSH
- Kubernetes secrets และไฟล์คอนฟิก
คำถามที่พบบ่อย
Base64 เหมือนกับการเข้ารหัสลับหรือการแฮชหรือไม่?
ไม่เหมือน การเข้ารหัสลับต้องใช้คีย์จึงจะย้อนกลับได้ การแฮชย้อนกลับไม่ได้เลย ส่วน Base64 ใครก็ถอดรหัสได้
ทำไมจึงเรียกว่า Base64?
เพราะใช้ชุดตัวอักษร 64 ตัว อักขระแต่ละตัวจึงเก็บข้อมูลได้ 6 บิต (26 = 64)
จะรู้ได้อย่างไรว่าสตริงเป็น Base64?
สตริงจะมีเฉพาะ A–Z, a–z, 0–9, +, / (หรือ - และ _) ความยาวมักเป็นผลคูณของ 4 และอาจลงท้ายด้วยเครื่องหมาย = หนึ่งหรือสองตัว วิธีทดสอบที่เร็วที่สุดคือวางลงในตัวถอดรหัสของเรา
อัปเดตล่าสุด: