ฉันรู้ว่าการbase64
เข้ารหัสคืออะไรและจะคำนวณการbase64
เข้ารหัสใน C # ได้อย่างไร แต่ฉันได้เห็นหลายครั้งว่าเมื่อฉันแปลงสตริงเป็นเบส 64 จะมี=
การสิ้นสุด
มีคำถามสองสามข้อที่เกิดขึ้น:
- ที่ไม่
base64
สตริงมักจะจบด้วย=
? - ทำไมการ
=
ได้รับต่อท้าย?
ฉันรู้ว่าการbase64
เข้ารหัสคืออะไรและจะคำนวณการbase64
เข้ารหัสใน C # ได้อย่างไร แต่ฉันได้เห็นหลายครั้งว่าเมื่อฉันแปลงสตริงเป็นเบส 64 จะมี=
การสิ้นสุด
มีคำถามสองสามข้อที่เกิดขึ้น:
base64
สตริงมักจะจบด้วย=
?=
ได้รับต่อท้าย?คำตอบ:
มันทำหน้าที่เป็นช่องว่างภายใน
คำตอบที่สมบูรณ์มากขึ้นคือสตริงที่เข้ารหัส base64 ไม่ได้ลงท้ายด้วย a เสมอ=
มันจะจบลงด้วยหนึ่งหรือสอง=
ถ้าพวกเขาจะต้องรองสตริงออกให้มีความยาวที่เหมาะสม
=
ใหม่ต่อไป หากคุณต้องการหาขอบเขตกลับมาก็จะมี terminator อยู่เสมอ (และยังจำเป็นต้องมีเพียงถ่านเดียว) แนวคิดการขยายทั้งหมดของ Base64 เป็นเพียงความคิด ...
base64
อย่างมีประสิทธิภาพด้วยภาพประกอบและตัวอย่าง ลิงก์ปัจจุบันไปยังวิกิพีเดียไม่เกี่ยวข้องอย่างเช่น @NH กล่าวถึง
1 ไม่มี
2- ในฐานะที่เป็นคำตอบสั้น ๆ : ตัวอักษร 65 ("=" เครื่องหมาย) ใช้เป็นส่วนประกอบในขั้นตอนสุดท้ายของการเข้ารหัสข้อความเท่านั้น
คุณจะไม่มีเครื่องหมาย '=' หากสตริงของคุณมีหลายตัวอักษร 3 ตัวเนื่องจากการBase64
เข้ารหัสใช้เวลาสามไบต์ (8 บิต) และแสดงเป็นอักขระสี่ตัวที่พิมพ์ได้ในมาตรฐาน ASCII
รายละเอียด:
(a)ถ้าคุณต้องการเข้ารหัส
ABCDEFG <=> [ ABC
] [ DEF
] [G
Base64
จะจัดการ (สร้างอักขระ 4 ตัว) กับบล็อกแรกและบล็อกที่สอง (เมื่อเสร็จสมบูรณ์) แต่สำหรับบล็อกที่สามจะเพิ่มสองเท่า==
ในเอาต์พุตเพื่อให้อักขระที่ต้องการครบ 4 ตัวดังนั้นผลลัพธ์จะเป็น QUJD REVG Rw == (ไม่มีที่ว่าง)
(ข)ถ้าคุณต้องการเข้ารหัส ...
ABCDEFGH <=> [ ABC
] [DEF
] [GH
ในทำนองเดียวกันมันจะเพิ่มเพียงหนึ่งเดียว=
ในตอนท้ายของการส่งออกเพื่อให้ได้ 4 ตัวอักษรผลจะเป็น QUJD REVG R0g = (ไม่มีช่องว่าง)
จากWikipedia :
ลำดับ '==' สุดท้ายระบุว่ากลุ่มสุดท้ายมีเพียงหนึ่งไบต์และ '=' ระบุว่ามีสองไบต์
ดังนั้นนี่คือการเรียงลำดับบางอย่าง
=
ที่ท้ายและทดสอบสิ่งนี้สำหรับ 1 ล้านสาย การถอดรหัสจับคู่เสมอ
มันถูกกำหนดในRFC 2045เป็นอักขระการขยายพิเศษหากมีน้อยกว่า 24 บิตในตอนท้ายของข้อมูลที่เข้ารหัส
เครื่องหมายเท่ากับ (=) ใช้เป็นช่องว่างภายในในการเข้ารหัส base64 บางรูปแบบ บทความวิกิพีเดียใน base64 มีรายละเอียดทั้งหมด
มันคือช่องว่างภายใน จากhttp://en.wikipedia.org/wiki/Base64 :
ในทางทฤษฎีแล้วตัวอักขระการเติมไม่จำเป็นสำหรับการถอดรหัสเนื่องจากจำนวนไบต์ที่หายไปสามารถคำนวณได้จากจำนวนของตัวเลข Base64 ในการนำไปใช้งานบางตัวอักขระการบังคับใช้จำเป็นต้องมีในขณะที่สำหรับสิ่งอื่นนั้นไม่ได้ใช้ กรณีหนึ่งที่ต้องใช้อักขระการเติมช่องว่างคือการเชื่อมไฟล์หลายไฟล์ที่เข้ารหัส Base64
decode(encode(A)+encode(B))=A+B
ทำงานกับการเสริมกำลัง แต่ไม่ขาด
http://www.hcidata.info/base64.htm
การเข้ารหัส "Mary had" ถึง Base 64
ในตัวอย่างนี้เรากำลังใช้สตริงข้อความแบบง่าย ("Mary had") แต่หลักการนี้ไม่ว่าข้อมูลจะเป็นเช่นไร (เช่นไฟล์กราฟิก) ในการแปลงข้อมูลอินพุต 24 บิตเป็นเอาต์พุต 32 บิตการเข้ารหัส Base 64 จะแบ่ง 24 บิตเป็น 4 ชิ้นของ 6 บิต ปัญหาแรกที่เราสังเกตเห็นคือ "Mary had" ไม่ใช่หลายคูณ 3 ไบต์ - ยาว 8 ไบต์ ด้วยเหตุนี้กลุ่มบิตสุดท้ายจึงมีความยาวเพียง 4 บิต เพื่อแก้ไขปัญหานี้เราได้เพิ่ม '0' สองบิตพิเศษและจดจำความจริงนี้โดยการใส่ '=' ในตอนท้าย หากสตริงข้อความที่จะแปลงเป็นฐาน 64 มีความยาว 7 ไบต์กลุ่มสุดท้ายจะมี 2 บิต ในกรณีนี้เราจะได้เพิ่มสี่บิตพิเศษของ '0' และจำความจริงนี้โดยใส่ '==' ในตอนท้าย