מקודד ומפענח Base64

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

רץ בדפדפן שלכםבלי הרשמהשום דבר לא מועלה

פלט Base64

איך משתמשים בכלי קידוד ופענוח Base64

  1. בחרו קידוד או פענוח.
  2. הקלידו או הדביקו את הקלט. התוצאה מתעדכנת תוך כדי הקלדה.
  3. עבור כתובות URL, JWT ושמות קבצים, סמנו בטוח ל-URL כדי להשתמש ב-- וב-_, ואם תרצו, השמיטו את הריפוד =.
  4. כדי להטמיע תמונה או גופן, לחצו על קידוד קובץ והשאירו את פלט כ-data URI מסומן.
  5. העתיקו את התוצאה, או השתמשו בהחלפה כדי להזין אותה בחזרה בכיוון ההפוך.

איך Base64 עובד

Base64 מייצג נתונים בינאריים באמצעות 64 תווי ASCII ניתנים להדפסה: A-Z, a-z, 0-9, + ו-/. כל 3 בתים של קלט הופכים ל-4 תווים, ולכן הנתונים המקודדים גדולים בכ-33%. כשאורך הקלט אינו כפולה של 3, סימן = אחד או שניים מרפדים את הפלט. Base64 הוא קידוד, לא הצפנה: כל אחד יכול לפענח אותו.

Base64 רגיל לעומת base64url

לתווים + ו-/ יש משמעות מיוחדת בכתובות URL ובנתיבי קבצים. האלפבית הבטוח ל-URL מתוך RFC 4648 §5 מחליף אותם ב-- וב-_ ובדרך כלל משמיט את הריפוד. JWT, פרמטרים רבים של OAuth וחלק מממשקי ה-API בענן משתמשים ב-base64url. המפענח כאן מקבל את שני האלפביתים באופן אוטומטי.

Unicode והמלכודת של btoa()‎

בדפדפנים, btoa("café") עובד אבל btoa("日本") זורק שגיאה, כי btoa מקבל רק Latin-1. הדרך הנכונה היא לקודד קודם את הטקסט לבתים של UTF-8, וזה בדיוק מה שהכלי הזה עושה. ב-JavaScript:‏ btoa(String.fromCharCode(...new TextEncoder().encode(text))), או Buffer.from(text).toString('base64') ב-Node.js.

שימושים נפוצים

  • Data URI לתמונות וגופנים קטנים ב-CSS או ב-HTML
  • כותרות אימות HTTP Basic (‏user:password מקודד)
  • קבצים מצורפים בינאריים במטעני JSON ובדואר אלקטרוני (MIME)
  • Kubernetes Secrets, ששומרים ערכים כ-Base64

שאלות נפוצות

האם Base64 הוא הצפנה?
לא. Base64 הוא קידוד הפיך ללא מפתח. כל אחד יכול לפענח אותו, אז לעולם אל תשתמשו בו כדי להסתיר סיסמאות או סודות.
למה ה-Base64 שלי לא מתפענח?
סיבות נפוצות הן תווים מחוץ לאלפבית (לרוב מירכה או שבירת שורה שנכנסו בהעתקה), מחרוזת קטועה, או ערבוב של טקסט שאינו Base64. הודעת השגיאה מציגה את המיקום של הבעיה הראשונה.
הפלט המפוענח נראה כמו ג'יבריש. למה?
כנראה שהנתונים בינאריים, למשל תמונה, קובץ דחוס או בתים מוצפנים, ולא טקסט. הכלי מזהה זאת, מציג hex dump ומאפשר להוריד את הבתים הגולמיים.
האם צריך את הריפוד =?
מפענחים רבים, כולל זה, עובדים גם בלעדיו, כי האורך מגלה להם כמה בתים חסרים. מפענחים קפדניים מסוימים דורשים אותו. JWT ורוב השימושים ב-base64url משמיטים את הריפוד.
האם הקבצים שלי מועלים?
לא. הקבצים נקראים ומקודדים מקומית באמצעות File API של הדפדפן. שום דבר לא נשלח לשרת.

כלים קשורים