Base64

מתוך ויקיפדיה, האנציקלופדיה החופשית
קפיצה אל: ניווט, חיפוש

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

את הקידוד בשיטה זו ניתן לראות כהעברה מבסיס בינארי (שבו שתי ספרות, 0 ו-1) לבסיס 64 (שבו 64 ספרות). שלושה בתים של 8 סיביות כל אחד (שבהם 24 סיביות בסך הכל) מיוצגים על ידי ארבע ספרות של Base64.

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

עיצוב[עריכת קוד מקור | עריכה]

בחירת 64 התווים המשמשים לייצוג 64 הספרות של Base64 משתנה בין מימושים שונים של שיטה זו. העיקרון הוא בחירה של 64 תווים הניתנים להדפסה ומשותפים למרבית השיטות לקידוד תווים. בחירה זו מבטיחה שתווים אלה לא ישתנו במעברם בין מערכות שונות. קידוד MIME של Base64 משתמש בתווים 0-9, a-z, A-Z (סה"כ 62 תווים) בתוספת שני התווים '/', '+'. מימושים אחרים בוחרים שני תווים אחרים להשלמת הסדרה של 64 התווים. שיטת uuencode של UNIX משתמשת בתווים 0-9, A-Z, אך במקום התווים a-z משתמשת בשלל סימני פיסוק ותווים אחרים.

Base64 - טבלת ערכים[עריכת קוד מקור | עריכה]

רצף של שישה ביטים נותן 64 = 26 אפשרויות שונות, ולכן טבלת ההמרה של Base64 כוללת 64 ערכים כדלקמן:

ערך בייצוג
עשרוני
ערך בייצוג
בינארי
תו בקידוד
Base64
ערך בייצוג
עשרוני
ערך בייצוג
בינארי
תו בקידוד
Base64
ערך בייצוג
עשרוני
ערך בייצוג
בינארי
תו בקידוד
Base64
ערך בייצוג
עשרוני
ערך בייצוג
בינארי
תו בקידוד
Base64
0 000000 A 16 010000 Q 32 100000 g 48 110000 w
1 000001 B 17 010001 R 33 100001 h 49 110001 x
2 000010 C 18 010010 S 34 100010 i 50 110010 y
3 000011 D 19 010011 T 35 100011 j 51 110011 z
4 000100 E 20 010100 U 36 100100 k 52 110100 0
5 000101 F 21 010101 V 37 100101 l 53 110101 1
6 000110 G 22 010110 W 38 100110 m 54 110110 2
7 000111 H 23 010111 X 39 100111 n 55 110111 3
8 001000 I 24 011000 Y 40 101000 o 56 111000 4
9 001001 J 25 011001 Z 41 101001 p 57 111001 5
10 001010 K 26 011010 a 42 101010 q 58 111010 6
11 001011 L 27 011011 b 43 101011 r 59 111011 7
12 001100 M 28 011100 c 44 101100 s 60 111100 8
13 001101 N 29 011101 d 45 101101 t 61 111101 9
14 001110 O 30 011110 e 46 101110 u 62 111110 +
15 001111 P 31 011111 f 47 101111 v 63 111111 /

שימושים[עריכת קוד מקור | עריכה]

סרטיפיקטים נפוצים כגון של תעודות X.509 בפורמט PEM[1], נשמרים בפורמט Base64 עקב קריאותם הרבה. באופן דומה, תוצאות של פונקציות גיבוב (Hash functions) מוצגות בדרך כלל ב Base64 מפני שהתוצר הגולמי שלהן עלול להכיל תווים לא קריאים.

נפוץ למצוא מידע מקודד ב-Base64 בתוך מסמכי XML שונים, במיוחד כאשר נעשה שימוש בתקשורת להעברת המסמכים.
סכמה פשוטה לדוגמה של שיבוץ קידוד כזה במסמך XML‏: <data encoding="base64">TextEncodedInBase64ComesHere</data>

OpenPGP[עריכת קוד מקור | עריכה]

OpenPGP[2], המתואר ב-RFC 4880 מגדיר קידוד Radix-64 (מכונה גם ASCII Armor).‏ Radix-64 הוא למעשה זהה ל Base64, בתוספת (אופציונלית) של 24 סיביות CRC. ה-Checksum, מחושב על המידע לפני הקידוד ואחר כך עובר בעצמו קידוד Base64, בתוספת תחילית של = המשמשת כתו מפריד, ומשורשר למידע המקודד.

HTML[עריכת קוד מקור | עריכה]

המתודות atob() ו btoa() של שפת JavaScript, המוגדרות במפרט של HTML5[3] נותנות שירות קידוד ל Base64 עבור קוד JS שרץ בדף אינטרנט. btoa() מוציאה את תווי הריפוד, אך אלו אופציונאליים בקלט של atob()

LDAP[עריכת קוד מקור | עריכה]

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

דוגמה[עריכת קוד מקור | עריכה]

הציטוט הבא (של רבי סעדיה גאון): "אין אומתנו אומה אלא בתורותיה"

יקודד למחרוזת Base64 של תווי ASCII הבאה:[דרושה הבהרה]

IteQ15nXnyDXkNeV157Xqteg15Ug15DXldee15Qg15DXnNeQINeR16rXldeo15XXqteZ15Qi

ריפוד[עריכת קוד מקור | עריכה]

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

IteQ15nXnyDXkNeV157Xqteg15Ug15DXldee15Qg15DXnNeQINeR16rXldeo15XXqteZ15QiLg==

מכיוון שכל 3 בתים (24 סיביות) ממופים ל-4 תווי Base64, יכול להווצר מצב שהרצף המקורי אינו מתחלק ב-3 וחייב להתבצע "ריפוד" המשלים את הבתים החסרים בקבוצה האחרונה. בדוגמה שלנו, הטקסט השני מכיל תו אחד יותר מהראשון (של נקודה . בסוף), והוא במקרה זה מקודד למחרוזת Lg שאינה ממלאת את כל המקום ב"קבוצה" האחרונה. לכן אנו רואים את הסיומת ==Lg, כאשר התוספת של הרצף == מצביע על כך שהקבוצה האחרונה (של 3 תווים) הכילה רק תו אחד במקור ולכן התווסף "ריפוד" של שני תווי = נוספים. במקרים בהם הקבוצה האחרונה מכילה שני תווים, ידרש ריפוד של = בודד.

קישורים חיצוניים[עריכת קוד מקור | עריכה]

הערות שוליים[עריכת קוד מקור | עריכה]

  1. ^ PEM Files, באתר How2SSL
  2. ^ קוד פתוח פופולרי להצפנה המבוסס על הסטנדרט PGP
  3. ^ "7.3. Base64 utility methods". HTML 5.2 Editor's Draft. World Wide Web Consortium. בדיקה אחרונה ב-2 בינואר 2017.  Introduced by changeset 5814, 2011-02-01.