เข้ารหัสข้อความและไฟล์เป็น Base64

แปลงข้อความ ไบต์ดิบ หรือไฟล์ใดก็ได้เป็น Base64 เลือกชุดอักขระที่ฝั่งผู้รับต้องการ เลือกว่าจะคงหรือตัดแพดดิง = ออก และตัดบรรทัดทุก 76 หรือ 64 อักขระสำหรับ MIME และ PEM

ทำงานภายในเบราว์เซอร์ของคุณทั้งหมด ไม่มีการอัปโหลดข้อมูลใด ๆ

วิธีใช้งาน

  1. พิมพ์หรือวางข้อความที่ต้องการเข้ารหัส ตั้ง “รูปแบบอินพุต” เป็น “เลขฐานสิบหก” เพื่อเข้ารหัสไบต์ดิบ หรือคลิก “เปิดไฟล์” เพื่อเข้ารหัสไฟล์
  2. ตั้ง “การเข้ารหัสอักขระ” เป็น UTF-8 ไว้ เว้นแต่ระบบปลายทางต้องการชุดอักขระอื่น
  3. ตั้งค่าตัวเลือก: ใช้ “รูปแบบ” มาตรฐานสำหรับงานส่วนใหญ่ ปิด “แพดดิง” หากฝั่งผู้รับไม่ต้องการ และตั้ง “ตัดบรรทัด” ที่ 76 (MIME) หรือ 64 (PEM) อักขระเมื่อจำเป็น
  4. กด “คัดลอก” เพื่อคัดลอกเอาต์พุต Base64 หรือ “ดาวน์โหลด” เพื่อบันทึกเป็นไฟล์

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

ตัวเข้ารหัสจะอ่านอินพุตครั้งละสามไบต์ ข้อมูล 24 บิตนี้จะถูกแบ่งเป็นสี่กลุ่ม กลุ่มละ 6 บิต และค่า 6 บิตแต่ละค่า (0 ถึง 63) จะใช้เลือกอักขระหนึ่งตัว ได้แก่ A-Z สำหรับ 0 ถึง 25 a-z สำหรับ 26 ถึง 51 0-9 สำหรับ 52 ถึง 61 ตามด้วย + และ / อินพุตสามไบต์ให้เอาต์พุตสี่อักขระ Base64 จึงมีขนาดใหญ่กว่าข้อมูลต้นฉบับประมาณ 33%

Text     M        a        n
Bytes    77       97       110
Bits     01001101 01100001 01101110
6-bit    010011 010110 000101 101110
Index    19     22     5      46
Base64   T      W      F      u

แพดดิงและความยาวของเอาต์พุต

เมื่อความยาวของอินพุตไม่ใช่พหุคูณของสาม กลุ่มสุดท้ายจะไม่ครบ ไบต์ที่เหลือหนึ่งไบต์จะกลายเป็นอักขระสองตัวตามด้วย == ส่วนไบต์ที่เหลือสองไบต์จะกลายเป็นอักขระสามตัวและ = หนึ่งตัว ดังนั้นเมื่ออินพุตมี n ไบต์ เอาต์พุตที่มีแพดดิงจะยาว 4 × ceil(n / 3) อักขระเสมอ

แพดดิงไม่ได้บรรจุข้อมูลใด ๆ JSON Web Token พารามิเตอร์ใน URL และ API จำนวนมากจึงละแพดดิงไว้ ให้ปิดแพดดิงเมื่อฝั่งผู้รับต้องการเอาต์พุตที่ไม่มีแพดดิง สำหรับลิงก์และชื่อไฟล์ ให้เลือกรูปแบบปลอดภัยสำหรับ URL หรือใช้หน้า Base64URL ซึ่งจะแทนที่ + และ / ด้วย - และ _

การตัดบรรทัดสำหรับ MIME และ PEM

โดยค่าเริ่มต้น เอาต์พุตจะเป็นบรรทัดยาวบรรทัดเดียว ซึ่งเป็นรูปแบบที่ JSON, data URI และส่วนหัว HTTP ต้องการ แต่มีสองรูปแบบที่ต้องมีการขึ้นบรรทัดใหม่:

  • MIME 76 อักขระ ไฟล์แนบอีเมลที่ส่งด้วย Content-Transfer-Encoding: base64 ต้องมีบรรทัดยาวไม่เกิน 76 อักขระ (RFC 2045) ตัวเลือกนี้จะจบบรรทัดด้วย CRLF ตามที่ MIME กำหนด
  • PEM 64 อักขระ ใบรับรองและคีย์ที่อยู่ระหว่างบรรทัด -----BEGIN และ -----END ใช้บรรทัดละ 64 อักขระ (RFC 7468) ตัวเลือกนี้จบบรรทัดด้วย LF

ชุดอักขระและไฟล์

Base64 เข้ารหัสไบต์ ไม่ใช่ตัวอักษร ข้อความจึงต้องถูกแปลงเป็นไบต์ด้วยชุดอักขระก่อน ตัวอักษร é มีขนาดสองไบต์ใน UTF-8 แต่มีเพียงหนึ่งไบต์ใน ISO-8859-1 หรือ Windows-1252 ข้อความเดียวกันจึงให้ผลลัพธ์ Base64 ต่างกัน UTF-8 เป็นตัวเลือกที่ถูกต้องสำหรับเว็บ JSON และ API สมัยใหม่เกือบทั้งหมด ให้เลือก GBK, Shift_JIS, Windows-1251 หรือชุดอักขระอื่นเฉพาะเมื่อต้องให้ตรงกับระบบรุ่นเก่าเท่านั้น

ไฟล์จะถูกเข้ารหัสตรงตามที่จัดเก็บไว้ โดยไม่มีการแปลงชุดอักขระ สำหรับรูปภาพพร้อมโค้ด HTML และ CSS สำเร็จรูป ดู แปลงรูปภาพเป็น Base64 หากต้องการ data URI พร้อมชนิด MIME ที่ตรวจพบ ให้ใช้ แปลงไฟล์เป็น Base64

ข้อกำหนด

ชุดตัวอักษรA-Z a-z 0-9 + /
ขนาดเอาต์พุต4 อักขระต่อ 3 ไบต์ (ประมาณ 133%)
แพดดิงเติม = จนความยาวเป็นพหุคูณของ 4
มาตรฐานRFC 4648 หัวข้อ 4
แยกตัวพิมพ์เล็ก-ใหญ่ใช่

ตัวอย่าง

อินพุต (UTF-8)เอาต์พุต
Hello, World!SGVsbG8sIFdvcmxkIQ==
Base64.isQmFzZTY0Lmlz
你好5L2g5aW9

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

ทำไมเอาต์พุต Base64 ของฉันจึงต่างจากตัวเข้ารหัสอื่น
เกือบทุกครั้งเป็นเพราะไบต์ของอินพุตต่างกัน สาเหตุที่พบบ่อยคือมีอักขระขึ้นบรรทัดใหม่ต่อท้าย (คำสั่ง echo ในเชลล์จะเพิ่มให้หนึ่งตัว ให้ใช้ printf '%s' หรือ echo -n แทน) ใช้ชุดอักขระต่างกัน ข้อความมีการจบบรรทัดแบบ Windows หรือตั้งค่าแพดดิง ชุดตัวอักษร หรือการตัดบรรทัดไม่เหมือนกัน ไบต์เดียวกันที่ใช้ตัวเลือกเดียวกันจะให้ผลลัพธ์เดียวกันเสมอ
จะเข้ารหัสข้อความ Unicode เป็น Base64 ใน JavaScript ได้อย่างไร
btoa() รับเฉพาะอักขระที่มีค่าไม่เกิน U+00FF และจะเกิดข้อผิดพลาดกับอักขระอื่นทั้งหมด ให้แปลงสตริงเป็นไบต์ UTF-8 ก่อน เช่น btoa(String.fromCharCode(...new TextEncoder().encode(str))) ส่วนใน Node.js ให้ใช้ Buffer.from(str, 'utf8').toString('base64')
จะเข้ารหัส Base64 ผ่านบรรทัดคำสั่งได้อย่างไร
บน Linux หรือ macOS ให้รัน printf '%s' 'your text' | base64 โดยค่าเริ่มต้น base64 ของ GNU จะตัดบรรทัดเอาต์พุตทุก 76 อักขระ (เพิ่ม -w 0 เพื่อให้ได้บรรทัดเดียว) ส่วน openssl base64 จะตัดทุก 64 อักขระ (เพิ่ม -A)
การเข้ารหัส Base64 เป็นการเข้ารหัสลับหรือไม่
ไม่ใช่ Base64 ไม่มีคีย์ และทุกคนสามารถแปลงกลับได้ด้วย ตัวถอดรหัส Base64 Base64 มีไว้เพื่อส่งข้อมูลไบนารีผ่านช่องทางที่รับได้เฉพาะข้อความ ไม่ได้มีไว้เพื่อซ่อนข้อมูล
Base64 ทำให้ข้อมูลใหญ่ขึ้นเท่าใด

ทุก 3 ไบต์จะกลายเป็น 4 อักขระ โดยปัดขึ้นให้ครบกลุ่ม เอาต์พุตจึงใหญ่ขึ้นประมาณ 33% และการตัดบรรทัดแบบ MIME จะเพิ่มอีกสองไบต์ (CRLF) ทุก 76 อักขระ