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

สารบัญ:

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

การเข้ารหัส Base64 เป็นกระบวนการของการแปลงข้อมูลไบนารีเป็นรูปแบบสตริง ASCII โดยการแปลงข้อมูลไบนารีนั้นเป็นการแสดงอักขระ 6 บิต วิธีการเข้ารหัส Base64 จะใช้เมื่อมีการส่งข้อมูลไบนารี เช่น รูปภาพหรือวิดีโอผ่านระบบที่ออกแบบมาเพื่อส่งข้อมูลในรูปแบบข้อความธรรมดา (ASCII)

ทำไมจึงใช้การเข้ารหัส Base64

ความจำเป็นในการเข้ารหัส Base64 มาจากปัญหาที่เกิดขึ้นเมื่อสื่อถูกส่งในรูปแบบไบนารีดิบไปยังระบบแบบข้อความ

เนื่องจากระบบข้อความ (เช่นอีเมล) ตีความข้อมูลไบนารีเป็นอักขระที่หลากหลาย รวมถึงอักขระคำสั่งพิเศษ ข้อมูลไบนารีส่วนใหญ่ที่ส่งไปยังสื่อถ่ายโอนข้อมูลจึงตีความผิดโดยระบบเหล่านั้นและสูญหายหรือเสียหายใน ขั้นตอนการส่ง

Image
Image

วิธีหนึ่งในการเข้ารหัสข้อมูลไบนารีประเภทนี้ในลักษณะที่หลีกเลี่ยงปัญหาการส่งข้อมูลดังกล่าว คือการส่งเป็นข้อความ ASCII ธรรมดาในรูปแบบที่เข้ารหัส Base64 นี่เป็นหนึ่งในเทคนิคที่ใช้โดยมาตรฐาน MIME ในการส่งข้อมูลที่ไม่ใช่ข้อความธรรมดา

ภาษาโปรแกรมหลายภาษา เช่น PHP และ Javascript มีฟังก์ชันการเข้ารหัสและถอดรหัส Base64 เพื่อตีความข้อมูลที่ส่งโดยใช้การเข้ารหัส Base64

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

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

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

64 อักขระ (เพราะฉะนั้นชื่อ Base64) คือ 10 หลัก, 26 ตัวพิมพ์เล็ก, 26 ตัวพิมพ์ใหญ่รวมทั้งเครื่องหมายบวก (+) และเครื่องหมายทับ (/) นอกจากนี้ยังมีอักขระตัวที่ 65 ที่เรียกว่า pad ซึ่งเป็นเครื่องหมายเท่ากับ (=) อักขระนี้ใช้เมื่อส่วนสุดท้ายของข้อมูลไบนารีไม่มี 6 บิตเต็ม

ตัวอย่างการเข้ารหัส Base64

ตัวอย่างเช่น ใช้ตัวเลข ASCII สามตัว 155, 162 และ 233 ตัวเลขทั้งสามนี้ประกอบเป็นไบนารีสตรีมที่ 100110111010001011101001 ไฟล์ไบนารี เช่น รูปภาพ มีสตรีมไบนารีที่ทำงานสำหรับศูนย์นับสิบหรือหลายแสนตัว และพวก

A ตัวเข้ารหัส Base64 เริ่มต้นด้วยการแบ่งสตรีมไบนารีออกเป็นกลุ่มๆ ละหกอักขระ: 100110 111010 001011 101001 แต่ละกลุ่มจะแปลเป็นตัวเลข 38, 58, 11 และ 41

ไบนารีสตรีม 6 ตัวจะแปลงระหว่างอักขระไบนารี (หรือฐาน-2) เป็นฐานสิบ (ฐาน-10) โดยการยกกำลังสองแต่ละค่าที่แสดงด้วย 1 ในลำดับไบนารีด้วยสี่เหลี่ยมตำแหน่งเริ่มจากด้านขวาและเคลื่อนไปทางซ้าย และเริ่มต้นด้วยศูนย์ ค่าในสตรีมไบนารีจะแทน 2^0 จากนั้น 2^1 จากนั้น 2^2 จากนั้น 2^3 จากนั้น 2^4 จากนั้น 2^5

ดูอีกแบบนะครับ เริ่มจากด้านซ้าย แต่ละตำแหน่งมีค่า 1, 2, 4, 8, 16 และ 32 หากเลขฐานสองมีเลข 1 ในช่อง คุณจะต้องเพิ่มค่านั้น ถ้ามันมีค่าเป็น 0 ในช่อง คุณก็ไม่มี สตริงไบนารี 100110 แปลงเป็นเลขฐานสิบ 38: 02^01 + 12^1 + 12^2 + 02^3 + 02^4 + 12^5=0+2 +4+0+0+32.

การเข้ารหัส Base64 ใช้สตริงไบนารีนี้และแบ่งออกเป็นค่า 6 บิต 38, 58, 11 และ 41

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

การใช้ตารางการแปลง Base64:

  • 38 คือ m
  • 58 คือ 6
  • 11 คือ L
  • 41 คือ p

กระบวนการสองขั้นตอนนี้ใช้กับสตริงไบนารีทั้งหมดที่เข้ารหัส

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

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

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

ตารางต่อไปนี้แปลอักขระทั้ง 64 ตัวที่ใช้ในการเข้ารหัส Base64

ตารางการเข้ารหัส Base64
Value Char Value Char Value Char Value Char
0 A 16 Q 32 g 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 U 36 k 52 0
5 F 21 V 37 l 53 1
6 G 22 W 38 m 54 2
7 H 23 X 39 55 3
8 ฉัน 24 Y 40 o 56 4
9 J 25 Z 41 p 57 5
10 K 26 a 42 q 58 6
11 L 27 b 43 r 59 7
12 M 28 c 44 s 60 8
13 N 29 d 45 t 61 9
14 O 30 e 46 u 62 +
15 31 f 47 v 63 /

ไขปริศนาสุดท้าย

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

วิธีแก้ไขคือการต่อท้ายไบต์ให้เพียงพอด้วยค่า 0 เพื่อสร้างกลุ่ม 3 ไบต์ ค่าดังกล่าวสองค่าจะถูกต่อท้ายหากข้อมูลต้องการข้อมูลเพิ่มหนึ่งไบต์ ค่าหนึ่งจะถูกต่อท้ายสำหรับสองไบต์พิเศษ

แน่นอนว่า '0 ต่อท้ายเทียมเหล่านี้ไม่สามารถเข้ารหัสโดยใช้ตารางการเข้ารหัสด้านล่าง ต้องแสดงด้วยอักขระที่ 65 อักขระเสริม Base64 คือเครื่องหมายเท่ากับ (=) และวางไว้ที่ส่วนท้ายของข้อมูลที่เข้ารหัส

แนะนำ: