ข้อมูลของคุณเป็นส่วนตัว 100% -- Base64 จะถูกเข้ารหัสและถอดรหัสทั้งหมดบนอุปกรณ์ของคุณ
Base64 คือวิธีการแทนข้อมูลไบนารีในรูปแบบข้อความธรรมดา โดยใช้อักขระ ASCII 64 ตัว ได้แก่ A–Z, a–z, 0–9, รวมถึง + และ / ช่วยให้ข้อมูลไบนารี เช่น รูปภาพ คีย์ และไฟล์แนบอีเมล ส่งผ่านระบบที่ออกแบบมาสำหรับข้อความได้อย่างปลอดภัย Base64 คือการเข้ารหัส ไม่ใช่การเข้ารหัสลับ
Base64 ใช้ชุดอักขระ 64 ตัวที่กำหนดไว้ตายตัว แต่ละค่าตั้งแต่ 0 ถึง 63 จะสอดคล้องกับอักขระหนึ่งตัวพอดี นี่คือวิธีที่ข้อมูลไบนารี 3 ไบต์กลายเป็นอักขระที่อ่านได้ 4 ตัว:
| ค่า | อักขระ | |
|---|---|---|
| 0–25 | A–Z | ตัวพิมพ์ใหญ่ 26 ตัว |
| 26–51 | a–z | ตัวพิมพ์เล็ก 26 ตัว |
| 52–61 | 0–9 | ตัวเลข 10 ตัว |
| 62–63 | + / | สัญลักษณ์ 2 ตัว |
เครื่องหมาย "=" เป็นข้อยกเว้นเดียว มันคือ padding ไม่ใช่หนึ่งใน 64 ค่า และมีไว้เพื่อเติมเต็มบล็อกสุดท้ายเท่านั้น
คุณน่าจะ เคยเห็นมันมาก่อนแล้ว Base64 ปรากฏอยู่ทุกที่ที่ข้อมูลไบนารีต้องเดินทางผ่านข้อความ:
เทคนิค data-URI นั้นมีหน้าตาแบบนี้ สตริงยาวๆ คือรูปภาพทั้งใบ:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot" />โปรโตคอลเครือข่ายในยุคแรกถูกสร้างมาสำหรับข้อความ ไม่ใช่ไบต์ดิบ ASCII ใช้ 7 บิตและ 128 อักขระ ซึ่งเพียงพอสำหรับภาษาอังกฤษแต่ไม่ใช่สำหรับข้อมูลไบนารี บางระบบบิดเบือนอักขระควบคุมหรือเขียนจุดสิ้นสุดบรรทัดใหม่ (LF เป็น CR + LF) ซึ่งทำให้รูปภาพและไฟล์เสียงเสียหายโดยไม่รู้ตัวระหว่างการส่ง
Base64 หลีกเลี่ยงปัญหาทั้งหมดนั้นโดยส่งออกเฉพาะอักขระที่ทุกระบบเห็นตรงกัน Base16 และ Base32 ทำงานแบบเดียวกันแต่ใช้ชุดอักขระที่เล็กกว่า แต่ Base64 บรรจุข้อมูลได้มากกว่าต่ออักขระหนึ่งตัวในขณะที่ยังคงปลอดภัย นั่นคือเหตุผลที่มันชนะ
กระบวนการทั้งหมดเป็นแนวคิดเดียวที่ทำซ้ำ: นำ 3 ไบต์ (24 บิต) มาแบ่งใหม่เป็นกลุ่ม 6 บิตสี่กลุ่ม แล้วค้นหาแต่ละกลุ่มในชุดอักขระ นี่คือคำว่า "Logto" ที่เข้ารหัสด้วยมือ
ขั้นตอนที่ 1 แปลงแต่ละอักขระเป็นเลขฐานสองขนาด 8 บิต:
| อักขระ | รหัส ASCII | เลขฐานสอง |
|---|---|---|
| L | 76 | 01001100 |
| o | 111 | 01101111 |
| g | 103 | 01100111 |
| t | 116 | 01110100 |
| o | 111 | 01101111 |
ขั้นตอนที่ 2 นำสามไบต์แรก "Log" มาแบ่ง 24 บิตเดิมใหม่เป็นสี่กลุ่ม 6 บิต:
ขั้นตอนที่ 3 อ่านแต่ละกลุ่ม 6 บิตเป็นตัวเลข แล้วค้นหาตัวเลขนั้นในชุดอักขระ:
| กลุ่ม 6 บิต | ค่า | อักขระ Base64 |
|---|---|---|
| 010011 | 19 | T |
| 000110 | 6 | G |
| 111101 | 61 | 9 |
| 100111 | 39 | n |
"Logto" มี 5 ไบต์ ไม่ใช่จำนวนที่หารด้วย 3 ลงตัว สองไบต์สุดท้าย "to" ให้การแบ่งเป็น 6 + 6 + 4 เติมบิตสุดท้าย 4 บิตด้วยศูนย์เพื่อให้ครบกลุ่ม 6 บิต แล้วเพิ่ม "=" หนึ่งตัวเพื่อให้บล็อก 4 อักขระสมบูรณ์:
นำบล็อกทั้งหมดมาต่อกัน:
"Logto" → TG9ndG8=ทุกภาษาโปรแกรมมีฟังก์ชันนี้ในตัว ใน Node.js:
const text = 'Logto';
const base64 = Buffer.from(text).toString('base64');
console.log(base64); // TG9ndG8=กฎสามข้อเกิดขึ้นจากกระบวนการนั้น ควรจำไว้:
ใช้ Base64 เมื่อข้อมูลไบนารีต้องผ่านช่องทางที่รองรับเฉพาะข้อความ:
สิ่งที่คุณได้รับตอบแทน:
Base64 มาตรฐานใช้อักขระสามตัวที่ขัดแย้งกับการทำงานของ URL, query string และชื่อไฟล์ ได้แก่ +, / และ padding "=" การนำสตริง Base64 ธรรมดาใส่ในลิงก์อาจทำให้เกิดปัญหาที่ไม่เด่นชัด:
คุณสามารถเข้ารหัสแบบ percent-encoding ได้ (+ เป็น %2B, / เป็น %2F, = เป็น %3D) แต่นั่นทำให้สตริงยาวขึ้นและเสี่ยงต่อการ encode ซ้ำโดยไม่ตั้งใจ
Base64URL (RFC 4648 §5) แก้ไขปัญหานี้ตั้งแต่ต้นทาง: แทนที่ + ด้วย -, แทนที่ / ด้วย _ และละ padding "=" ผลลัพธ์สามารถใส่ใน URL, query parameter หรือชื่อไฟล์ได้โดยตรงโดยไม่ต้องทำอะไรเพิ่ม คุณจะพบมันใน URL, ชื่อไฟล์ และ web API หลายตัว
const base64 = 'TG9ndG8=';
const urlSafe = base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '');
console.log(urlSafe); // TG9ndG8Base64 คือการแทนค่า ไม่ใช่ของฟรี ควรจำสิ่งสามอย่างนี้ไว้:
ไม่ใช่ มันคือการเข้ารหัสที่ย้อนกลับได้โดยใช้ชุดอักขระสาธารณะ ดังนั้นทุกคนสามารถถอดรหัสได้ทันทีและไม่เพิ่มความลับเลย ควรเข้ารหัสลับข้อมูลที่มีความอ่อนไหวแทน
Base64 แปลงทุก 3 ไบต์เป็น 4 อักขระ ดังนั้นรูปแบบที่เข้ารหัสจะใหญ่กว่าไบต์ต้นฉบับประมาณหนึ่งในสามเสมอ
มันคือ padding ที่ทำให้ output เป็นจำนวนเต็มของ 4 อักขระ "=" หนึ่งตัวหมายถึง input มี 2 ไบต์เหลือ สองตัวหมายถึงมี 1 ไบต์เหลือ ไม่มีเลยหมายถึงความยาวเป็นจำนวนเต็มของ 3 ไบต์อยู่แล้ว
Base64URL คือการเข้ารหัสแบบเดียวกันแต่ใช้ชุดอักขระที่ปลอดภัยสำหรับ URL และชื่อไฟล์: - และ _ แทนที่ + และ / และ padding "=" มักถูกละออก ใช้กันทั่วไปใน URL, ชื่อไฟล์ และ web API หลายตัว
ไบนารีทุกประเภท: รูปภาพ, PDF, คีย์, ไฟล์ปฏิบัติการ Base64 ทำงานบนไบต์ดิบ ดังนั้นประเภทเนื้อหาต้นฉบับไม่มีผล
ไม่ การเข้ารหัสและถอดรหัสทำงานทั้งหมดในเบราว์เซอร์ของคุณ ไม่มีสิ่งที่คุณวางจะถูกอัปโหลดหรือบันทึก