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

ถ้าอินเทอร์เน็ตเป็นทางหลวงข้อมูลแล้วเส้นทางอีเมลก็คือหุบเหวแคบ เฉพาะรถลากขนาดเล็กสามารถผ่านได้

ระบบการขนส่งอีเมลถูกออกแบบมาสำหรับข้อความ ASCII ธรรมดาเท่านั้น การพยายามส่งข้อความในภาษาอื่นหรือไฟล์โดยพลการก็เหมือนกับการได้รับรถบรรทุกผ่านหุบเหว

รถบรรทุกขนาดใหญ่จะผ่านช่องแคบอย่างไร?

แล้วคุณจะส่งรถบรรทุกขนาดใหญ่ผ่านลำธารขนาดเล็กได้อย่างไร? คุณต้องเอามันไปหาชิ้นที่ปลายด้านหนึ่งขนส่งชิ้นส่วนผ่านหุบเหวและสร้างรถบรรทุกจากชิ้นที่ปลายอีกด้านหนึ่ง

เช่นเดียวกันจะเกิดขึ้นเมื่อคุณส่ง ไฟล์แนบผ่านทางอีเมล ในกระบวนการที่เรียกว่าการเข้ารหัสข้อมูลไบนารีจะเปลี่ยนเป็นข้อความ ASCII ซึ่งสามารถส่งผ่านอีเมลได้โดยไม่มีปัญหา ในตอนท้ายของผู้รับข้อมูลจะถูกถอดรหัสและไฟล์ต้นฉบับจะถูกสร้างใหม่

วิธีหนึ่งในการเข้ารหัสข้อมูลโดยพลการเป็นข้อความ ASCII ธรรมดาคือ Base64 เป็นหนึ่งในเทคนิคที่ใช้โดย มาตรฐาน MIME ในการส่งข้อมูลอื่น ๆ นอกเหนือจาก ข้อความล้วน

Base64 เพื่อช่วยเหลือ

การเข้ารหัส Base64 ใช้เวลา 3 ไบต์ซึ่งประกอบด้วย 8 บิตและแสดงเป็นอักขระที่พิมพ์ได้ 4 ตัวในมาตรฐาน ASCII มันไม่ว่าในหลักสองขั้นตอน

ขั้นตอนแรกคือการแปลงสามไบต์เป็นสี่จำนวนหกบิต อักขระแต่ละตัวในมาตรฐาน ASCII ประกอบด้วยเจ็ดบิต Base64 ใช้เฉพาะ 6 บิต (สอดคล้องกับ 2 ^ 6 = 64 อักขระ) เพื่อให้แน่ใจว่าข้อมูลที่เข้ารหัสสามารถพิมพ์ได้และสามารถอ่านได้แบบมนุษย์ ไม่มีอักขระพิเศษใดที่มีอยู่ใน ASCII

อักขระ 64 ตัว (ด้วยเหตุนี้ Base64 ชื่อ) มี 10 หลัก, 26 ตัวพิมพ์เล็ก, 26 ตัวพิมพ์ใหญ่เช่นเดียวกับ '+' และ '/'

ถ้าตัวอย่างเช่นไบต์ที่สามคือ 155, 162 และ 233 กระแสบิตที่สอดคล้องกัน (และน่ากลัว) คือ 100110111010001011101001 ซึ่งจะตรงกับค่า 6 บิต 38, 58, 11 และ 41

ตัวเลขเหล่านี้จะถูกแปลงเป็นอักขระ ASCII ในขั้นตอนที่สองโดยใช้ตารางการเข้ารหัส Base64 ค่า 6 บิตของตัวอย่างของเราแปลเป็นลำดับ ASCII "m6Lp"

กระบวนการสองขั้นตอนนี้ใช้กับลำดับไบต์ทั้งหมดที่เข้ารหัส เพื่อให้แน่ใจว่าข้อมูลที่เข้ารหัสสามารถพิมพ์ได้อย่างถูกต้องและไม่เกินความยาวบรรทัดของเซิร์ฟเวอร์จดหมายจะมีการแทรกอักขระบรรทัดใหม่เพื่อให้บรรทัดยาวต่ำกว่า 76 อักขระ ตัวอักษรใหม่จะถูกเข้ารหัสเช่นเดียวกับข้อมูลอื่น ๆ ทั้งหมด

การแก้ปัญหา Endgame

ในตอนท้ายของขั้นตอนการเข้ารหัสเราอาจประสบปัญหา ถ้าขนาดของข้อมูลต้นฉบับเป็นไบต์เป็นจำนวนหลายสามข้อทุกอย่างทำงานได้ดี ถ้าไม่ใช่เราอาจจะจบลงด้วยไบต์ 8 บิตหนึ่งหรือสองอัน สำหรับการเข้ารหัสที่ถูกต้องเราจำเป็นต้องมี 3 ไบต์อย่างแน่นอน

การแก้ปัญหาคือการผนวกพอไบต์ที่มีค่าเป็น "0" เพื่อสร้างกลุ่ม 3 ไบต์ ค่าสองค่าดังกล่าวจะถูกผนวกเข้าถ้าเรามีไบต์ข้อมูลเสริมหนึ่งไบข้อมูลหนึ่งชุดจะถูกเพิ่มเป็นสองไบต์พิเศษ

แน่นอนว่าการลากเส้นเทียมเหล่านี้ '0' ไม่สามารถเข้ารหัสได้โดยใช้ตารางการเข้ารหัสด้านล่าง ต้องเป็นอักขระ 65 ตัว

อักขระ padding Base64 คือ '=' โดยธรรมชาติแล้วจะสามารถปรากฏได้เฉพาะเมื่อสิ้นสุดการเข้ารหัสเท่านั้น

ตารางการเข้ารหัส Base64

ความคุ้มค่า ถ่าน ความคุ้มค่า ถ่าน ความคุ้มค่า ถ่าน ความคุ้มค่า ถ่าน
0 16 Q 32 ก. 48 W
1 B 17 R 33 ชั่วโมง 49 x
2 C 18 S 34 ผม 50 Y
3 D 19 T 35 J 51 Z
4 E 20 ยู 36 k 52 0
5 F 21 V 37 ล. 53 1
6 G 22 W 38 ม. 54 2
7 H 23 X 39 n 55 3
8 ผม 24 Y 40 โอ 56 4
9 J 25 Z 41 พี 57 5
10 K 26 42 Q 58 6
11 L 27 43 R 59 7
12 M 28 44 s 60 8
13 ยังไม่มีข้อความ 29 d 45 เสื้อ 61 9
14 O 30 อี 46 ยู 62 +
15 P วันที่ 31 47 โวลต์ 63 /