איך פועל קידוד 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. שלושת המספרים הללו מהווים זרם בינארי של 1001101110100010111101001. קובץ בינארי, כמו תמונה, מכיל זרם בינארי הפועל לעשרות או מאות אלפי אפסים ואחדים.

מקודד Base64 מתחיל בחלוקה של הזרם הבינארי לקבוצות של שישה תווים: 100110 111010 001011 101001. כל אחת מהקבוצות הללו מתורגמת למספרים 38, 58, 11 ו-41.

זרם בינארי בן שישה תווים ממיר בין תווים בינאריים (או בסיס-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 h 49 x
2 C 18 S 34 i 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 I 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 P 31 f 47 v 63 /

פתור את סוף המשחק

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

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

כמובן, לא ניתן לקודד את ה-0 האפסים המלאכותיים האלה באמצעות טבלת הקידוד למטה. הם חייבים להיות מיוצגים על ידי תו 65. תו הריפוד Base64 הוא סימן השווה (=) והוא ממוקם בסוף הנתונים המקודדים.

מוּמלָץ: