ในบันทึกที่เกี่ยวข้องนี่คือตัวแปลงพื้นฐานสำหรับการแปลงฐานโดยพลการที่ฉันสร้างขึ้นสำหรับคุณ สนุก!
https://convert.zamicol.com/
ตัวอักษร Padding คืออะไร?
อักขระเว้นวรรคช่วยตอบสนองความต้องการด้านความยาวและไม่มีความหมาย
ตัวอย่างทศนิยมของการ
เว้นวรรค:เนื่องจากข้อกำหนดที่กำหนดเองสตริงทั้งหมดมีความยาว 8 อักขระจำนวน 640 สามารถตอบสนองความต้องการนี้โดยใช้ 0 นำหน้าเป็นอักขระช่องว่างภายในเนื่องจากไม่มีความหมาย "00000640"
การเข้ารหัสไบนารี
กระบวนทัศน์ไบต์:ไบต์เป็นหน่วยวัดมาตรฐานโดยพฤตินัยและรูปแบบการเข้ารหัสใด ๆ จะต้องสัมพันธ์กับไบต์
Base256เหมาะกับกระบวนทัศน์นี้ หนึ่งไบต์เท่ากับหนึ่งอักขระใน base256
Base16เลขฐานสิบหกหรือฐานสิบหกใช้ 4 บิตสำหรับแต่ละอักขระ หนึ่งไบต์สามารถแทนอักขระ base16 ได้สองตัว
Base64ไม่พอดีกับกระบวนทัศน์ไบต์ (หรือฐาน 32) ไม่เท่ากันซึ่งแตกต่างจาก base256 และ base16 อักขระ base64 ทั้งหมดสามารถแสดงเป็น 6 บิตสั้น 2 บิตของไบต์เต็ม
เราสามารถเป็นตัวแทนของ base64 เข้ารหัสเมื่อเทียบกับกระบวนทัศน์ไบต์เป็นเศษส่วน: 6 บิตต่อตัวละครกว่า 8 บิตต่อไบต์ เศษส่วนที่ลดลงคือ 3 ไบต์ส่วนอักขระ 4 ตัว
อัตราส่วนนี้ 3 ไบต์สำหรับทุกๆ 4 อักขระ base64 เป็นกฎที่เราต้องการปฏิบัติตามเมื่อเข้ารหัส base64 การเข้ารหัส Base64 สามารถรับประกันได้แม้กระทั่งการวัดด้วยบันเดิล 3 ไบต์ซึ่ง แตกต่างจาก base16 และ base256 ที่ทุกไบต์สามารถยืนได้ด้วยตัวเอง
ดังนั้นทำไมช่องว่างภายในได้รับการสนับสนุนแม้ว่าการเข้ารหัสจะทำงานได้ดีโดยไม่มีอักขระช่องว่างหรือไม่
หากไม่ทราบความยาวของสตรีมหรือหากทราบแน่ชัดว่าสตรีมข้อมูลสิ้นสุดลงเมื่อใดให้ใช้ช่องว่างภายใน อักขระช่องว่างภายในจะสื่อสารอย่างชัดเจนว่าจุดพิเศษเหล่านั้นควรว่างเปล่าและขจัดความคลุมเครือใด ๆ แม้ว่าจะไม่ทราบความยาวของช่องว่างคุณจะทราบว่าสตรีมข้อมูลของคุณสิ้นสุดที่ใด
ตามตัวอย่างตัวนับมาตรฐานบางอย่างเช่นJOSEไม่อนุญาตให้ใช้อักขระช่องว่างภายใน ในกรณีนี้หากมีบางอย่างขาดหายไปลายเซ็นการเข้ารหัสจะไม่ทำงานหรืออักขระอื่น ๆ ที่ไม่ใช่ base64 จะหายไป (เช่น ".") แม้ว่าจะไม่มีการตั้งสมมติฐานเกี่ยวกับความยาว แต่ก็ไม่จำเป็นต้องมีช่องว่างภายในเพราะหากมีสิ่งผิดปกติก็จะไม่ได้ผล
และนี่คือสิ่งที่base64 RFC พูด
ในบางสถานการณ์ไม่จำเป็นต้องใช้หรือใช้ padding ("=") ในข้อมูลที่เข้ารหัสพื้นฐาน ในกรณีทั่วไปเมื่อไม่สามารถตั้งสมมติฐานเกี่ยวกับขนาดของข้อมูลที่ขนส่งได้จำเป็นต้องมีช่องว่างภายในเพื่อให้ได้ข้อมูลที่ถอดรหัสถูกต้อง
[... ]
ขั้นตอนการเติมในฐาน 64 [... ] หากนำไปใช้ไม่ถูกต้องจะนำไปสู่การเปลี่ยนแปลงข้อมูลที่เข้ารหัสที่ไม่สำคัญ ตัวอย่างเช่นหากอินพุตเป็นเพียงหนึ่งอ็อกเต็ตสำหรับการเข้ารหัสฐาน 64 สัญลักษณ์แรกทั้งหกบิตจะถูกใช้ แต่จะใช้เพียงสองบิตแรกของสัญลักษณ์ถัดไปเท่านั้น บิตแพดเหล่านี้ต้องถูกตั้งค่าเป็นศูนย์โดยใช้ตัวเข้ารหัสซึ่งอธิบายไว้ในคำอธิบายเกี่ยวกับช่องว่างภายในด้านล่าง หากไม่มีคุณสมบัตินี้จะไม่มีการแสดงข้อมูลที่เข้ารหัสฐานตามมาตรฐานและสามารถถอดรหัสสตริงที่เข้ารหัสฐานหลายตัวให้เป็นข้อมูลไบนารีเดียวกันได้ หากคุณสมบัตินี้ (และอื่น ๆ ที่กล่าวถึงในเอกสารนี้) มีการรับรองการเข้ารหัสที่ยอมรับได้
Padding ช่วยให้เราสามารถถอดรหัสการเข้ารหัส base64 โดยสัญญาว่าจะไม่มีบิตสูญหาย หากไม่มีช่องว่างภายในจะไม่มีการยอมรับอย่างชัดเจนเกี่ยวกับการวัดในกลุ่มสามไบต์อีกต่อไป หากไม่มีช่องว่างภายในคุณอาจไม่สามารถรับประกันการสร้างการเข้ารหัสต้นฉบับได้อย่างถูกต้องโดยไม่มีข้อมูลเพิ่มเติมจากที่อื่นในสแต็กของคุณเช่น TCP เช็คซัมหรือวิธีการอื่น ๆ
ตัวอย่าง
นี่คือตัวอย่างแบบฟอร์ม RFC 4648 ( http://tools.ietf.org/html/rfc4648#section-8 )
อักขระแต่ละตัวในฟังก์ชัน "BASE64" ใช้หนึ่งไบต์ (base256) จากนั้นเราแปลเป็น base64
BASE64("") = "" (No bytes used. 0%3=0.)
BASE64("f") = "Zg==" (One byte used. 1%3=1.)
BASE64("fo") = "Zm8=" (Two bytes. 2%3=2.)
BASE64("foo") = "Zm9v" (Three bytes. 3%3=0.)
BASE64("foob") = "Zm9vYg==" (Four bytes. 4%3=1.)
BASE64("fooba") = "Zm9vYmE=" (Five bytes. 5%3=2.)
BASE64("foobar") = "Zm9vYmFy" (Six bytes. 6%3=0.)
นี่คือตัวเข้ารหัสที่คุณสามารถเล่นได้: http://www.motobit.com/util/base64-decoder-encoder.asp