איך Base64 קידוד עובד

אם האינטרנט הוא כביש המידע, אז הנתיב עבור הדוא"ל הוא ערוץ צר. רק עגלות קטנות מאוד יכולות לעבור.

מערכת התחבורה של הדוא"ל מיועדת לטקסט ASCII רגיל בלבד. מנסה לשלוח טקסט בשפות אחרות או קבצים שרירותיים הוא כמו לקבל משאית דרך הערוץ.

איך משאית גדולה לעבור את ravine?

אז איך אתה שולח משאית גדולה דרך גיא קטן? אתה צריך לקחת אותו לחתיכות בצד אחד, להעביר את החלקים דרך הערוץ, ולבנות מחדש את המשאית מן החלקים בצד השני.

אותו הדבר קורה כאשר אתה שולח קובץ מצורף באמצעות דוא"ל . בתהליך המכונה קידוד הנתונים הבינאריים הופך לטקסט ASCII, אשר ניתן להעביר בדוא"ל ללא בעיות. בסוף הנמען, הנתונים מפוענחים והקובץ המקורי נבנה מחדש.

שיטה אחת של קידוד נתונים שרירותיים כמו טקסט ASCII רגיל הוא Base64. זוהי אחת הטכניקות המועסקים על ידי תקן MIME לשלוח נתונים אחרים מאשר טקסט רגיל .

Base64 כדי להציל את

קידוד Base64 לוקח שלושה בתים, שכל אחד מהם מורכב משמונה סיביות, ומייצג אותם כארבעה תווים להדפסה בתקן ASCII. זה עושה את זה בעצם שני שלבים.

הצעד הראשון הוא להמיר שלושה בתים לארבעה מספרים של שישה סיביות. כל תו בתקן ASCII מורכב משבעה סיביות. Base64 משתמש רק ב- 6 סיביות (המקביל ל -2 ^ 6 = 64 תווים) כדי להבטיח שהנתונים המקודדים ניתנים להדפסה וניתנים לקריאה אנושית. אף אחד מהתווים המיוחדים הזמינים ב- ASCII אינו בשימוש.

64 התווים (ומכאן השם Base64) הם 10 ספרות, 26 תווים קטנים, 26 תווים באותיות רישיות וכן '+' ו- '' '.

לדוגמה, שלושת הבתים הם 155, 162 ו- 233, הזרם המקביל (ומפחיד) הוא 100110111010001011101001, אשר בתורו מתאים לערכים של סיביות 38, 58, 11 ו- 41.

מספרים אלה מומרים לתווי ASCII בשלב השני באמצעות טבלת קידוד Base64. את 6 סיביות ערכים של הדוגמה שלנו לתרגם את רצף ASCII "m6lp".

תהליך דו-שלבי זה מוחל על כל הרצף של בתים המקודדים. כדי לוודא שהנתונים המקודדים יכולים להיות מודפסים כהלכה ואינם חורגים ממגבלת אורך הקו של שרת הדואר, מתווספות תווים חדשים כדי לשמור על אורך שורות מתחת ל -76 תווים. התווים החדשים הם מקודדים כמו כל הנתונים האחרים.

לפתור את Endgame

בסוף תהליך הקידוד, אנו עלולים להיתקל בבעיה. אם את גודל הנתונים המקוריים בבתים הוא מספר של שלושה, הכל עובד בסדר. אם זה לא, אנחנו עלולים בסופו של דבר עם אחד או שני בתים 8 סיביות. עבור קידוד תקין, אנחנו צריכים בדיוק שלושה בתים, עם זאת.

הפתרון הוא לצרף מספיק בתים עם ערך של '0' כדי ליצור קבוצה של 3 בתים. שני ערכים כאלה מצורפים אם יש לנו עוד אחד בתים של נתונים, אחד הוא צירף עבור שני בתים נוספים.

כמובן, אלה מלאכותיים נגרר '0 של לא ניתן לקודד באמצעות שולחן קידוד להלן. הם חייבים להיות מיוצגים על ידי דמות 65.

תו הריפוד Base64 הוא '='. באופן טבעי, הוא יכול להופיע רק בסוף הנתונים המקודדים.

טבלת Base64 קידוד

ערך לְהַשְׁחִיר ערך לְהַשְׁחִיר ערך לְהַשְׁחִיר ערך לְהַשְׁחִיר
0 א 16 ש 32 ז 48 w
1 ב 17 R 33 ח 49 איקס
2 ג 18 S 34 אני 50 y
3 ד 19 T 35 י 51 z
4 ה 20 U 36 k 52 0
5 F 21 אשר 37 l 53 1
6 ז 22 W 38 M 54 2
7 ח 23 איקס 39 n 55 3
8 אני 24 Y 40 o 56 4
9 י 25 Z 41 עמ ' 57 5
10 K 26 א 42 q 58 6
11 L 27 43 ייצור 59 7
12 M 28 c 44 s 60 8
13 N 29 ד 45 t 61 9
14 הו 30 ה 52 u 62 +
15 עמ ' 31 ו 47 v 63 /