Base64 คืออะไรและมีไว้เพื่ออะไร
Base64 คือรูปแบบการเข้ารหัสจากไบนารีเป็นข้อความ มันแปลงข้อมูลดิบ เช่น ไฟล์ภาพ ไฟล์ archive คีย์เข้ารหัส หรืออะไรก็ตามที่ไม่ใช่ข้อความที่อ่านได้ โดยเขียนใหม่โดยใช้ตัวอักษรที่ปลอดภัยและพิมพ์ได้ 64 ตัว ได้แก่ ตัวพิมพ์ใหญ่ A-Z 26 ตัว ตัวพิมพ์เล็ก a-z 26 ตัว ตัวเลข 0-9 สิบตัว และสัญลักษณ์เพิ่มเติมสองตัว ซึ่งโดยทั่วไปคือ + และ / เครื่องหมายเท่ากับใช้สำหรับ padding ท้ายผลลัพธ์ เนื่องจากทุกตัวอักษรที่สร้างขึ้นเป็น ASCII ธรรมดา ผลลัพธ์จึงสามารถผ่านระบบที่ออกแบบมาเพื่อจัดการกับข้อความเท่านั้นได้
นั่นคือเหตุผลทั้งหมดที่ Base64 ถูกคิดค้นขึ้น โปรโตคอลเก่าๆ หลายอย่าง เช่น อีเมลซึ่งเป็นตัวอย่างคลาสสิก ต่างถือว่าเนื้อหาที่ส่งผ่านนั้นเป็นข้อความ หากคุณส่งข้อมูลไบนารีดิบเข้าไป บางไบต์จะถูกบิดเบือน ตัดทิ้ง หรือถูกตีความเป็นอักขระควบคุม และข้อมูลจะมาถึงปลายทางแบบเสียหาย Base64 หลีกเลี่ยงปัญหานี้โดยแปลงไบต์ให้อยู่ในรูปแบบที่ช่องทางใดๆ ที่ปลอดภัยสำหรับข้อความจะส่งผ่านไปได้โดยไม่เปลี่ยนแปลง จากนั้นจึงสร้างข้อมูลต้นฉบับคืนได้อย่างสมบูรณ์ที่ปลายทางอีกฝั่ง

กลไกการแปลงทำงานอย่างไร
ในเชิงกลไก Base64 จะจัดกลุ่ม input เป็นชิ้นละสามไบต์ นั่นคือ 24 บิต จากนั้นจึงหั่น 24 บิตเดิมนั้นออกเป็นสี่กลุ่ม กลุ่มละหกบิต หกบิตสามารถแทนค่าได้ 64 ค่า ซึ่งนั่นแหละคือเหตุที่ตัวอักษรมี 64 ตัวพอดี ดังนั้น input สามไบต์จะกลายเป็น output สี่ตัวอักษรเสมอ เมื่อความยาว input ไม่หารด้วยสามได้ลงตัว encoder จะเติม = หนึ่งหรือสองตัวในกลุ่มสุดท้าย เพื่อให้ decoder รู้ว่าข้อมูลจริงสิ้นสุดตรงไหน
อัตราส่วนสี่ต่อสามนี้แหละที่เป็นที่มาของค่าใช้จ่ายด้านขนาดที่เลื่องลือ output ของ Base64 ใหญ่กว่าข้อมูลต้นฉบับประมาณ 33% หากข้อความที่ encode แล้วถูกห่อเป็นบรรทัดความกว้างคงที่ตามที่มาตรฐานอีเมลมักกำหนด คุณก็จ่ายเพิ่มอีกไม่กี่เปอร์เซ็นต์สำหรับการขึ้นบรรทัดใหม่ ค่าใช้จ่ายนี้คือราคาของความเข้ากันได้ และสำหรับการใช้งานส่วนใหญ่ถือว่าคุ้มค่า
พบ Base64 ได้ที่ไหนบ้าง
เมื่อคุณรู้ว่าต้องมองหาอะไร Base64 จะปรากฏอยู่ทุกที่ในการใช้คอมพิวเตอร์ทั่วไป:
- Data URIs. ภาพขนาดเล็กหรือฟอนต์สามารถฝังโดยตรงใน HTML หรือ CSS ด้วย URI แบบ
data:โดยเขียนเนื้อหาไฟล์เป็น Base64 เบราว์เซอร์ถอดรหัสแบบ inline ซึ่งประหยัด network request แยกต่างหาก - สิ่งแนบมากับอีเมล. MIME มาตรฐานที่ให้อีเมลส่งไฟล์ได้ อาศัย Base64 เพื่อเคลื่อนย้ายสิ่งแนบไบนารีผ่านระบบอีเมลที่ใช้ข้อความเท่านั้นโดยไม่เสียหาย
- HTTP Basic authentication. header
Authorization: Basic ...ที่คุ้นเคยคือเพียงชื่อผู้ใช้และรหัสผ่านที่เชื่อมด้วยเครื่องหมายทวิภาคแล้ว encode ด้วย Base64 นั่นเองคือเหตุที่ Basic auth ต้องทำงานผ่าน HTTPS เสมอ - โทเค็นและ config. JSON Web Tokens ใบรับรอง คีย์ SSH และค่า configuration นับไม่ถ้วนถูกเก็บหรือส่งเป็น Base64 เพื่อให้รอดจากการ copy-paste และการจัดเก็บบนระบบข้อความ
การ Encoding ไม่ใช่การเข้ารหัส
นี่คือสิ่งที่สำคัญที่สุดที่ต้องเข้าใจ และมันทำให้ทั้งผู้เริ่มต้นและนักพัฒนาที่มีประสบการณ์สับสนเท่ากัน Base64 ไม่ใช่การเข้ารหัสและไม่ได้ให้ความปลอดภัยใดๆ เลย ไม่มีคีย์ลับ ไม่มีรหัสผ่าน และไม่มีอะไรเป็นความลับเกี่ยวกับมัน การแปลงนั้นเปิดเผยต่อสาธารณะและสามารถย้อนกลับได้อย่างสมบูรณ์ ใครก็ตามที่เห็นสตริง Base64 สามารถถอดรหัสกลับเป็นไบต์ต้นฉบับได้ในพริบตา โดยใช้เครื่องมือแบบเดียวกับที่นี่
ดังนั้น Base64 จึงเป็นที่ซ่อนที่แย่มากสำหรับรหัสผ่าน API key หรือค่าสำคัญใดๆ หากสตริงหนึ่งดูเหมือนถูกสับเปลี่ยน นั่นไม่ได้ทำให้มันได้รับการปกป้อง การเข้ารหัสจริงๆ เปลี่ยนข้อมูลด้วยคีย์ลับเพื่อให้เฉพาะผู้ที่ถือคีย์นั้นเท่านั้นที่สามารถอ่านได้ ทั้งสองอย่างแก้ปัญหาต่างกัน การเข้ารหัสปกป้องความลับ Base64 ปกป้องความเข้ากันได้ มักใช้ร่วมกัน เช่น คุณอาจเข้ารหัสข้อมูลด้วย AES แล้ว encode ciphertext ด้วย Base64 เพื่อให้ส่งผ่านช่องทางข้อความได้ แต่อย่างหนึ่งไม่สามารถแทนที่อีกอย่างหนึ่งได้

Encode กับ Decode ต่างกันอย่างไร
สองทิศทางนั้นเป็นภาพสะท้อนที่เรียบง่าย Encoding นำข้อความต้นฉบับหรือไบนารีของคุณและสร้างสตริง Base64 Decoding นำสตริง Base64 และสร้างไบต์ต้นฉบับที่แน่นอนคืนมา เครื่องมือของเราทำทั้งสองอย่างโดยตรงในเบราว์เซอร์ของคุณ สิ่งที่คุณพิมพ์หรือวางจะไม่ถูกส่งไปยังเซิร์ฟเวอร์ใดๆ เลย การดำเนินการจึงเป็นแบบ local และเป็นส่วนตัวโดยสมบูรณ์ ทำให้ปลอดภัยสำหรับการถอดรหัสโทเค็นที่คุณกำลังดีบัก หรือ encode snippet ที่ต้องการฝัง โดยไม่มีข้อมูลออกจากหน้า
สำหรับการแปลงที่เกี่ยวข้อง ดูเครื่องมือ URL encode/decode ของเราสำหรับ percent-encoding หรือ JWT decoder เมื่อคุณต้องการตรวจสอบส่วน Base64 ภายในโทเค็น คุณจะพบสิ่งเหล่านี้ควบคู่กับเครื่องมือสำหรับนักพัฒนาส่วนที่เหลือของเรา
คำถามที่พบบ่อย
Base64 เป็นรูปแบบหนึ่งของการเข้ารหัสหรือไม่?
ไม่ใช่ Base64 คือการ encoding ไม่ใช่การเข้ารหัส มันไม่มีคีย์และสามารถย้อนกลับได้อย่างสมบูรณ์โดยทุกคน จึงไม่มีความปลอดภัยใดๆ ใช้การเข้ารหัสจริงๆ เช่น AES หรือ RSA เพื่อปกป้องข้อมูลสำคัญ
ทำไม Base64 ถึงทำให้ข้อมูลใหญ่ขึ้น?
Base64 แปลง input ทุกสามไบต์เป็น output สี่ตัวอักษร ซึ่งเพิ่มขนาดประมาณ 33% หาก output ถูกแบ่งเป็นบรรทัดความยาวคงที่ การขึ้นบรรทัดใหม่จะเพิ่มอีกไม่กี่เปอร์เซ็นต์
Base64 ใช้ตัวอักษรอะไรบ้าง?
ตัวอักษรมาตรฐานคือตัวพิมพ์ใหญ่ 26 ตัว ตัวพิมพ์เล็ก 26 ตัว ตัวเลข 0 ถึง 9 บวกสัญลักษณ์ plus และ slash โดยใช้เครื่องหมายเท่ากับสำหรับ padding ท้าย
ฉันสามารถเก็บรหัสผ่านใน Base64 ได้อย่างปลอดภัยหรือไม่?
ไม่ได้ Base64 เปลี่ยนเฉพาะวิธีที่ข้อมูลดูเท่านั้น ไม่ใช่ว่าใครสามารถอ่านได้ ทุกคนสามารถถอดรหัสได้ทันที รหัสผ่านควร hash ด้วยอัลกอริทึมที่แข็งแกร่ง และความลับควรถูกเข้ารหัส
เครื่องมือ Base64 นี้เป็นส่วนตัวหรือไม่?
ใช่ การ encode และ decode เกิดขึ้นทั้งหมดในเบราว์เซอร์ของคุณ ไม่มีสิ่งที่คุณป้อนถูกอัปโหลดหรือส่งไปยังเซิร์ฟเวอร์ใดๆ ดังนั้นข้อมูลของคุณจึงอยู่บนอุปกรณ์ของคุณเอง
ความแตกต่างระหว่างการ encoding กับ decoding คืออะไร?
Encoding แปลงข้อความต้นฉบับหรือไบนารีเป็นสตริง Base64 Decoding กลับทิศนั้น เปลี่ยนสตริง Base64 กลับเป็นไบต์ต้นฉบับที่แน่นอน ทั้งสองเป็นการดำเนินการที่สะท้อนกัน
