เครื่องมือแปลง Base64

เข้ารหัสข้อความเป็น Base64 หรือถอดกลับ ระบบจะแปลงข้อความเป็นไบต์ UTF-8 ก่อน ภาษาไทย อิโมจิ และภาษาอื่นจึงแปลงไปกลับได้ครบ ส่วนการถอดรหัสค่อนข้างยืดหยุ่น รับข้อมูลที่ไม่มี padding ข้อมูลที่ตัดขึ้นบรรทัดใหม่ และรับได้ทั้งชุดอักขระมาตรฐานและแบบ URL-safe

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

Base64 ต้องใช้สัญลักษณ์ 64 ตัว หกสิบสองตัวแรกไม่มีใครเถียง คือ A–Z, a–z, 0–9 ส่วนสองตัวสุดท้ายคือจุดที่สองแบบต่างกัน เพราะตัวที่นึกออกก่อนดันมีความหมายอยู่แล้วใน URL

มาตรฐานURL-safe
สัญลักษณ์ที่ 62+-
สัญลักษณ์ที่ 63/_
Paddingเติม = ให้ครบชุดละ 4ปกติจะตัดทิ้ง
ใช้ใน URL ได้ไหมไม่ได้: + กลายเป็นช่องว่าง / ตัด pathได้
เจอได้ที่ไหนอีเมล ไฟล์ PEM data: URIJWT พารามิเตอร์ใน URL ชื่อไฟล์

การถอดรหัสที่นี่รับได้ทั้งสองชุดไม่ว่าจะติ๊กช่องหรือไม่ และเติม padding ที่ขาดกลับให้ เพราะข้อมูลที่คัดลอกมาจาก JWT หรือไฟล์ PEM มักไม่มีทั้งสองอย่าง

ทำไมผลลัพธ์ถึงใหญ่ขึ้นหนึ่งในสาม

Base64 เขียนข้อมูลทุก 3 ไบต์ใหม่เป็น 4 ตัวอักษร ผลลัพธ์จึงมีขนาดราว 133% ของข้อมูลเดิมเสมอ บวกอักขระ padding อีกไม่เกินสองตัว

3 ไบต์   → 4 ตัวอักษร
          100 KB   → ประมาณ 137 KB
          1 MB     → ประมาณ 1.37 MB

นี่คือราคาของรูปแบบนี้ ไม่ใช่ความไม่มีประสิทธิภาพ Base64 มีไว้เพื่อส่งข้อมูลไบนารี ผ่านช่องทางที่รับได้แต่ข้อความ และขนาดที่โตขึ้นคือสิ่งที่แลกมา นี่จึงเป็นเหตุผลที่ การฝังรูปใหญ่ ๆ เป็น data: URI ใน CSS มักเป็นความคิดที่ไม่ดี เพราะไฟล์โตขึ้นหนึ่งในสามและแคชแยกไม่ได้

Base64 ไม่ใช่การเข้ารหัสลับ

เรื่องนี้ควรพูดตรง ๆ เพราะคนสับสนกันบ่อยมาก Base64 คือการแปลงรูปแบบที่ย้อนกลับได้ และไม่มีกุญแจ ใครที่อ่านสตริงที่แปลงแล้วได้ ก็อ่านข้อมูลต้นฉบับได้ และเบราว์เซอร์ทุกตัวมีตัวถอดรหัสติดมาอยู่แล้ว

การเอารหัสผ่าน API key หรือ token มาแปลงเป็น Base64 ช่วยกันได้แค่สายตาที่มองผ่าน ๆ เท่านั้น ถ้ามันต้องเป็นความลับจริง สิ่งที่ต้องใช้คือการเข้ารหัสลับ พร้อมกุญแจที่เก็บไว้คนละที่กับข้อมูลที่แปลงแล้ว

คำถามที่พบบ่อย

รองรับภาษาไทยและอิโมจิไหม

รองรับ ระบบจะแปลงข้อความเป็นไบต์ UTF-8 ก่อนเข้ารหัส ฟังก์ชัน btoa() ที่มากับเบราว์เซอร์จะ error เมื่อเจอตัวอักษรนอก Latin-1 เครื่องมือแปลง Base64 หลายตัวจึงพังตั้งแต่ตัวอักษรไทยตัวแรก

โหมด URL-safe มีไว้ทำอะไร

Base64 มาตรฐานใช้ + และ / ซึ่งมีความหมายอยู่แล้วใน URL ชุด URL-safe จะใช้ - และ _ แทน และตัด padding ออก ส่วนการถอดรหัสรับได้ทั้งสองแบบไม่ว่าจะติ๊กช่องนี้หรือไม่

ถอดรหัส Base64 ที่ไม่มี padding หรือมีการขึ้นบรรทัดได้ไหม

ได้ทั้งสองแบบ Base64 ที่คัดลอกมาจากไฟล์ PEM ส่วนหัวอีเมล หรือ JWT มักถูกตัดบรรทัดหรือไม่มี padding ระบบจึงข้ามช่องว่างและเติม padding กลับให้

ข้อมูลของฉันถูกอัปโหลดไหม

ไม่ การเข้ารหัสและถอดรหัสเกิดขึ้นในเบราว์เซอร์ของคุณ และนโยบายความปลอดภัยของเว็บกำหนด connect-src ‘none’ เบราว์เซอร์จึงบล็อกการเรียกเครือข่ายจากหน้านี้