Skip to main content

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

ทดสอบการเข้ารหัสข้อมูลแบบ Base64 ด้วย PHP (เมษายน 2025)

ทดสอบการเข้ารหัสข้อมูลแบบ Base64 ด้วย PHP (เมษายน 2025)
Anonim

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

ระบบการขนส่งอีเมลถูกออกแบบมาสำหรับข้อความ 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"

  • 155 -> 10011011
  • 162 -> 10100010
  • 233 -> 11101001
  • 100110 -> 38
  • 111010 -> 58
  • 001011 -> 11
  • 101001 -> 41
  • 38 -> เมตร
  • 58 -> 6
  • 11 -> L
  • 41 -> p

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

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

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

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

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

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

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

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