การเข้ารหัส Base64 เป็นกระบวนการของการแปลงข้อมูลไบนารีเป็นรูปแบบสตริง ASCII โดยการแปลงข้อมูลไบนารีนั้นเป็นการแสดงอักขระ 6 บิต วิธีการเข้ารหัส Base64 จะใช้เมื่อมีการส่งข้อมูลไบนารี เช่น รูปภาพหรือวิดีโอผ่านระบบที่ออกแบบมาเพื่อส่งข้อมูลในรูปแบบข้อความธรรมดา (ASCII)
ทำไมจึงใช้การเข้ารหัส Base64
ความจำเป็นในการเข้ารหัส Base64 มาจากปัญหาที่เกิดขึ้นเมื่อสื่อถูกส่งในรูปแบบไบนารีดิบไปยังระบบแบบข้อความ
เนื่องจากระบบข้อความ (เช่นอีเมล) ตีความข้อมูลไบนารีเป็นอักขระที่หลากหลาย รวมถึงอักขระคำสั่งพิเศษ ข้อมูลไบนารีส่วนใหญ่ที่ส่งไปยังสื่อถ่ายโอนข้อมูลจึงตีความผิดโดยระบบเหล่านั้นและสูญหายหรือเสียหายใน ขั้นตอนการส่ง
วิธีหนึ่งในการเข้ารหัสข้อมูลไบนารีประเภทนี้ในลักษณะที่หลีกเลี่ยงปัญหาการส่งข้อมูลดังกล่าว คือการส่งเป็นข้อความ 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 คือเครื่องหมายเท่ากับ (=) และวางไว้ที่ส่วนท้ายของข้อมูลที่เข้ารหัส