Base64

מתוך ויקיפדיה, האנציקלופדיה החופשית
קפיצה אל: ניווט, חיפוש
Gnome-colors-edit-find-replace.svg יש לשכתב ערך זה. הסיבה לכך היא: תרגום שנעשה בחוסר הבנה.
אתם מוזמנים לסייע ולתקן את הבעיות, אך אנא אל תורידו את ההודעה כל עוד לא תוקן הדף. אם אתם סבורים כי אין בדף בעיה, ניתן לציין זאת בדף השיחה.


Gnome-colors-emblem-development-2.svg הערך נמצא בשלבי עבודה: כדי למנוע התנגשויות עריכה ועבודה כפולה אתם מתבקשים שלא לערוך ערך זה בטרם תוסר הודעה זו, אלא אם כן תיאמתם זאת עם מניחי התבנית.
אם הערך לא נערך במשך שבוע ניתן להסיר את התבנית ולערוך אותו, אך רצוי לתת קודם תזכורת בדף שיחת הכותבים.

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

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

שימוש בקידוד מחרוזת כלשהיא ל Base64 נפוץ כאשר רוצים להעביר מידע ממערכת אחת לשנייה אך קיים חשש של שיבוש נתונים, בעיקר כתוצאה מפרוטוקול תקשורת או אפליקציה שאינה יודעת להתמודד היטב עם תווים מסוימים, כמו חוסר תמיכה בשפה זרה, תווים שאין להם סמל ויזואלי אך יש להם משמעות כתו, וכן תווים לא סטנדרטיים (כמו Ǖ, ⅗, ᶋ, ☎, וכיוצא באלו) שנתמכים באפליקציית המקור אך לא באפליקציית היעד או באחד הגורמים המנהלים את הנתונים בתווך.

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

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

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

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

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

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

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

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

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

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

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

ערך בינארי
בייצוג עשרוני
תו בקידוד
Base64
ערך בינארי
בייצוג עשרוני
תו בקידוד
Base64
ערך בינארי
בייצוג עשרוני
תו בקידוד
Base64
ערך בינארי
בייצוג עשרוני
תו בקידוד
Base64
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 n 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 /

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

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

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

IteQ15nXnyDXkNeV157Xqteg15Ug15DXldee15Qg15DXnNeQINeR16rXldeo15XXqteZ15Qi

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

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

IteQ15nXnyDXkNeV157Xqteg15Ug15DXldee15Qg15DXnNeQINeR16rXldeo15XXqteZ15QiLg==

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

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

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

  1. ^ התווים האפשריים הם 0-9, a-z, A-Z (סה"כ 62 תווים) ובתוספת שני התווים '/', '+' (הנתמכים במרבית סדרות התווים) מתקבלת קבוצה מלאה של 64.
  2. ^ PEM Files, באתר How2SSL
  3. ^ קוד פתוח פופולרי להצפנה המבוסס על הסטנדרט PGP
  4. ^ "7.3. Base64 utility methods". HTML 5.2 Editor's Draft. World Wide Web Consortium. בדיקה אחרונה ב-2 בינואר 2017.  Introduced by changeset 5814, 2011-02-01.