เข้ารหัสและถอดรหัส Base64
แปลงข้อความหรือไฟล์เป็น Base64 หรือถอดรหัส Base64 กลับเป็นข้อความที่อ่านได้ รองรับ Unicode อย่างถูกต้อง เปลี่ยนเป็นชุดอักขระแบบ URL-safe ได้ในคลิกเดียว และการถอดรหัสรับได้ทั้งสองชุดอักขระ ไม่ว่าจะมีเครื่องหมายเติมท้าย (padding) หรือไม่
0 ตัวอักษร · 0 คำ · 0 บรรทัด
0 ตัวอักษร · 0 คำ · 0 บรรทัด
ทำงานทั้งหมดภายในแท็บเบราว์เซอร์นี้ ข้อความของคุณจะไม่ถูกอัปโหลดหรือจัดเก็บไว้
ชุดอักขระ Base64
ดัชนี → อักขระตาม RFC 4648 สองตัวสุดท้ายที่ไฮไลต์ไว้จะต่างกันในรูปแบบ URL-safe: ลำดับที่ 62 คือ + หรือ - และลำดับที่ 63 คือ / หรือ _
- 0A
- 1B
- 2C
- 3D
- 4E
- 5F
- 6G
- 7H
- 8I
- 9J
- 10K
- 11L
- 12M
- 13N
- 14O
- 15P
- 16Q
- 17R
- 18S
- 19T
- 20U
- 21V
- 22W
- 23X
- 24Y
- 25Z
- 26a
- 27b
- 28c
- 29d
- 30e
- 31f
- 32g
- 33h
- 34i
- 35j
- 36k
- 37l
- 38m
- 39n
- 40o
- 41p
- 42q
- 43r
- 44s
- 45t
- 46u
- 47v
- 48w
- 49x
- 50y
- 51z
- 520
- 531
- 542
- 553
- 564
- 575
- 586
- 597
- 608
- 619
- 62+ -
- 63/ _
ผลลัพธ์จะยาวเท่าไร
ข้อมูลเข้าทุก 3 ไบต์จะกลายเป็น 4 อักขระ กลุ่มสุดท้ายที่มี 1 หรือ 2 ไบต์จะเติม = ใน Base64 มาตรฐาน และไม่เติมในรูปแบบ URL-safe
| ข้อมูลเข้า | ไบต์ | มาตรฐาน | URL-safe | ความยาว |
|---|---|---|---|---|
U | 1 | VQ== | VQ | 4 |
Ul | 2 | VWw= | VWw | 4 |
Ult | 3 | VWx0 | VWx0 | 4 |
UltK | 4 | VWx0Sw== | VWx0Sw | 8 |
UltKi | 5 | VWx0S2k= | VWx0S2k | 8 |
UltKit | 6 | VWx0S2l0 | VWx0S2l0 | 8 |
Base64 ทำงานอย่างไร
Base64 ซึ่งกำหนดไว้ใน RFC 4648 เขียนข้อมูลไบต์ใด ๆ ด้วยอักขระ ASCII ที่พิมพ์ได้ 64 ตัว ได้แก่ A–Z, a–z, 0–9, + และ / ทุกกลุ่มละสามไบต์ (24 บิต) จะถูกแบ่งเป็นตัวเลข 6 บิตสี่ตัว และตัวเลขแต่ละตัวจะเลือกอักขระหนึ่งตัวจากชุดอักขระนี้ เมื่อความยาวของข้อมูลนำเข้าไม่ใช่พหุคูณของสาม กลุ่มสุดท้ายจะเติมเครื่องหมาย = หนึ่งหรือสองตัว ผลลัพธ์จะใหญ่กว่าข้อมูลนำเข้าประมาณ 33% เสมอ คือ 4 อักขระต่อทุก 3 ไบต์
สาเหตุที่มี Base64 คือช่องทางจำนวนมากถูกออกแบบมาสำหรับข้อความ อีเมล (MIME), data: URL ใน HTML และ CSS, ฟิลด์ JSON ที่ส่งรูปภาพหรือใบรับรอง และส่วนหัว HTTP Basic authentication ล้วนใช้ Base64 เพื่อส่งข้อมูลไบนารีอย่างปลอดภัย Base64 ไม่ใช่การเข้ารหัสลับและไม่ได้ซ่อนอะไรไว้ การถอดรหัสไม่ต้องใช้กุญแจ
Unicode และรูปแบบ URL-safe
Base64 เข้ารหัสไบต์ ไม่ใช่ตัวอักษร ข้อความจึงต้องถูกแปลงเป็นไบต์ก่อน เครื่องมือนี้ใช้ UTF-8 เสมอ ซึ่งเป็นการเข้ารหัสที่เว็บใช้งานอยู่ โดย é กลายเป็นสองไบต์ และอีโมจิเป็นสี่ไบต์ ฟังก์ชัน btoa ที่มีในเบราว์เซอร์เพียงอย่างเดียวจะเกิดข้อผิดพลาดกับอักขระที่เกิน U+00FF จึงทำให้ตัวเข้ารหัสแบบง่าย ๆ ใช้ไม่ได้กับตัวอักษรที่มีเครื่องหมายและอีโมจิ ที่นี่ข้อความจะผ่าน TextEncoder ก่อน และการถอดรหัสจะย้อนกลับด้วย TextDecoder หากไบต์ที่ถอดรหัสได้ไม่ใช่ UTF-8 ที่ถูกต้อง (เช่น รูปภาพหรือไฟล์ zip) เครื่องมือจะแสดงเป็นเลขฐานสิบหกแทนข้อความที่อ่านไม่ออก
Base64 มาตรฐานใช้ + และ / ซึ่งมีความหมายพิเศษใน URL และชื่อไฟล์ ชุดอักขระแบบ URL-safe จากส่วนที่ 5 ของ RFC 4648 จึงแทนที่ด้วย - และ _ และมักตัดการเติม = ออก JSON Web Token ใช้รูปแบบนี้ ตัวถอดรหัสรองรับทั้งสองแบบและรองรับกรณีที่ไม่มีการเติม = คุณจึงวางแบบใดก็ได้
การเข้ารหัสไฟล์และรูปภาพ
เลือกไฟล์แล้วเครื่องมือจะอ่านไฟล์ในเครื่องด้วย FileReader และส่งคืนเป็น Base64 หรือ data: URL ที่สมบูรณ์พร้อมชนิด MIME ของไฟล์ ซึ่งนำไปวางในแท็ก img หรือพื้นหลัง CSS ได้ทันที รูปภาพแบบอินไลน์ช่วยลดการร้องขอ HTTP หนึ่งครั้ง แต่ขนาดจะใหญ่ขึ้นหนึ่งในสามและแคชแยกต่างหากไม่ได้ จึงเหมาะกับไอคอนขนาดเล็กมากกว่ารูปถ่าย หากต้องการแปลงรูปภาพพร้อมตัวอย่างและโค้ด HTML และ CSS สำเร็จรูป ให้ใช้ แปลงรูปเป็น Base64
คำถามที่พบบ่อย
- ทำไมผลลัพธ์ Base64 จึงยาวกว่าข้อมูลต้นฉบับ
- ทุก 3 ไบต์จะกลายเป็น 4 อักขระ ผลลัพธ์จึงมีขนาดประมาณ 4/3 ของข้อมูลนำเข้า บวกอักขระเติมได้สูงสุดสองตัว ข้อความที่ไม่ใช่ ASCII จะยาวกว่านั้นอีก เพราะ UTF-8 ใช้สองถึงสี่ไบต์ต่ออักขระ
- เครื่องหมาย = ที่ท้ายข้อความคืออะไร
- คือการเติมอักขระ ซึ่งทำให้ความยาวผลลัพธ์เป็นพหุคูณของสี่ เมื่อความยาวข้อมูลนำเข้าไม่ใช่พหุคูณของสาม เครื่องหมาย = หนึ่งตัวหมายถึงกลุ่มสุดท้ายมีสองไบต์ และ = สองตัวหมายถึงมีหนึ่งไบต์
- ทำไมถอดรหัสไม่สำเร็จและขึ้นข้อผิดพลาดว่ามีอักขระไม่ถูกต้อง
- ข้อมูลนำเข้ามีอักขระที่อยู่นอกชุดอักขระ เช่น ช่องว่างกลางคำ เครื่องหมายอัญประกาศ หรือ % จากการเข้ารหัส URL ระบบยอมรับการขึ้นบรรทัดใหม่และการไม่มี = เติมท้าย แต่ไม่ยอมรับอักขระอื่น
- เข้ารหัสรหัสผ่านด้วย Base64 ปลอดภัยหรือไม่
- Base64 ไม่มีการป้องกันใด ๆ HTTP Basic authentication ส่ง user:password เป็น Base64 จึงต้องใช้ผ่าน HTTPS เท่านั้น หากต้องการปกป้องข้อมูลลับ ให้ใช้การเข้ารหัสลับหรือการแฮชจริง ๆ
- Base64 กับ Base64url ต่างกันอย่างไร
- ต่างกันเพียงสองอักขระและการเติม = โดย Base64url ใช้ - และ _ แทน + และ / และมักไม่ใส่ = ผลลัพธ์จึงอยู่ใน URL และชื่อไฟล์ได้โดยไม่ต้องเอสเคป