ماذا يعني « encoder » و« decoder » في Base64؟
الترميز إلى Base64 (« encode base64 ») يحوّل البايتات — وغالبًا بايتات نص مرمّز بـ UTF-8 — إلى سلسلة من 64 حرفًا مسموحًا: 26 حرفًا كبيرًا و26 حرفًا صغيرًا و10 أرقام، ثم + و /. فك ترميز Base64 (« decode base64 ») ينجز العملية العكسية تمامًا: تُقرأ السلسلة بمجموعات من 4 أحرف، يمثل كل حرف 6 بت، و24 بت تعطي 3 بايتات. هذا هو التبادل الذي يبحث عنه أغلب الناس عندما يكتبون « encode and decode base64 ».
ليس Base64 ترميزًا ضاغطًا ولا تشفيرًا: يصبح النص أطول بنحو ثلث، وأي شخص يستطيع قراءته في ثانية. فائدته أنه ينقل البايتات عبر قنوات لا تقبل سوى حروف ASCII آمنة — عناوين URL ورؤوس HTTP وملفات الإعدادات وJSON وSVG المضمّن والبريد الإلكتروني وقواعد البيانات النصية.
كيف ترمّز نصًا إلى Base64
الخطوة 1: يُشفَّر النص أولًا إلى بايتات بحسب مجموعة الحروف المختارة — UTF-8 افتراضيًا، لكن Latin-1 وWindows-1252 وASCII أو UTF-16 تظل مفيدة للأنظمة القديمة. الخطوة 2: تُقرأ البايتات ثلاثًا ثلاثًا، أي 24 بت. الخطوة 3: تُقسَّم هذه الـ24 بت إلى أربعة كتل من 6 بت، ويُستبدل كل كتل بالحرف في موقعه من الأبجدية. الخطوة 4: إذا كانت المجموعة الأخيرة غير مكتملة، تُستكمل بأصفار وتُغلق السلسلة بعلامة أو علامتين من = (padding).
مثال خطوة بخطوة: « AB » يساوي 65 ثم 66 بالعشري، أي 01000001 01000010. بثلاث بايتات مع مكمّل: 01000001 01000010 00000000. المجموعات الأربع من 6 بت هي 010000 010100 001000 000000 → مواقع 16، 20، 8، 0 → QUI=. ما عليك سوى كتابة « AB » في المُرمِّز: تظهر النتيجة قبل أن ترفع إصبعك عن المفتاح.
كيف تفك ترميز Base64 إلى نص
يقرأ فك الترميز السلسلة بمجموعات من 4 أحرف بعد إزالة فواصل الأسطر والمسافات إن وجدت. يُستبدل كل حرف بقيمته على 6 بت، وتُدمج القيم الأربع في 24 بت، ثم تُقسَّم الـ24 بت إلى 3 بايتات. علامات = النهائية تُبيّن عدد البايتات المفيدة فعلًا في المجموعة الأخيرة: علامة واحدة = تعني 2 بايت، وعلامتان = تعنيان بايتًا واحدًا.
إذا احتوت السلسلة على - أو _، فهذه تنويعة URL-safe: تحوّلها الأداة تلقائيًا إلى + و / قبل فك الترميز. وإذا نقص padding، يُعيده زر «إصلاح الـ padding». وعند حرف خارج الأبجدية أو تبويب في موضع خاطئ أو طول ليس من مضاعفات 4، تظهر رسالة الخطأ بالسبب الدقيق بدل مجرد «غير صالح».
تنويعة URL-safe (RFC 4648 §5)
يستخدم Base64 القياسي + و /، وهما حرفان يسببان مشكلة في رابط URL: + يُفسَّر كمسافة من معظم الخوادم، بينما / قد يُخلط مع فاصل مسار. تنويعة URL-safe يستبدلهما بـ - و _، دون الحاجة إلى أي ترميز هروب. وهي إلزامية في JWT (تُرمَّز الأجزاء الثلاثة للرمز دون padding)، و ملفات تعريف الارتباط، و المعرّفات وبارامترات عنوان URL.
padding « = »: ما فائدته
يعمل Base64 بمجموعات من 4 أحرف، لكن حجم الملف لا يكون من مضاعفات 3 بايتات في العادة. يستعيد padding الطول المتوقع: يبقى بايت واحد فيُنتج ==، ويبقى 2 بايت فيُنتج =. يحذفه بعض الأنظمة (بعض واجهات API وBase64URL)؛ ويطلبه آخرون (PHP وفكّات ترميز قديمة). خيار «بدون padding» في المُرمِّز وزر «إصلاح الـ padding» في المُفكِّك يغطيان الحالتين.
ترميز الحروف: UTF-8 وLatin-1 وUTF-16
لا يعرف Base64 الحروف، بل البايتات فقط. إذن فالسؤال المحوري: بماذا نُشفّر النص قبل Base64؟ بـ UTF-8 يشغل « é » بايتين و« 日 » ثلاثة؛ وبـ Latin-1 يكفي « é » بايتًا واحدًا بينما يصبح « 日 » مستحيلًا. فك ترميز UTF-8 لسلسلة مرمّزة بـ Latin-1 ينتج حروفًا مشوهة (« mojibake »). إذا جرّبت أداة عبر الإنترنت وكان الناتج غير مفهوم، فالسبب غالبًا ترميز مختلف عند البداية — ومن هنا الخيارات الستة المقدَّمة هنا.
الملف وdata URI والصور بـ Base64
تأتي data URI بالشكل data:<نوع MIME>;base64,<بيانات>. تتيح دمج صورة مباشرة في CSS أو HTML أو JSON: background-image:url(data:image/png;base64,iVBOR…). لفك الترميز، الصق السلسلة كاملة في تبويب «ملف ⇄ Base64»: يُستخرج نوع MIME، ويُقترح الاسم، ثم يُعاد إنشاء الملف ويصبح قابلًا للتنزيل. انتبه للحجم: يضيف Base64 نحو 33 % ولا تُخزَّن data URI منفصلة في الذاكرة المؤقتة أبدًا.
Base64 وURL-encoding ولماذا لا تخلط بينهما
الترميز بالنسبة المئوية (%20, %C3%A9) يستبدل كل بايت غير مسموح به بنسبة مئوية: إنه أطول من Base64 بضعفين إلى ثلاث مرات لكنه يبقي النص الأصلي مقروئًا. أما Base64 فينتج سلسلة مدمجة ومنتظمة، مثالية لتخزين البيانات لكنها غير مقروءة. ويعرض تبويب «URL & data URI» التحويلين جنبًا إلى جنب لتفادي الخطأ الشائع في ترميز عنوان URL بـ Base64 بينما كان يجب ترميز هروبه — أو العكس.
Base64 في الصيغ اليومية
Base64 في كل مكان: الأجزاء الثلاثة لـ JWT، وخاصية src في صورة SVG مضمّنة، وحقل cert لملف PDF، و attachments MIME لرسائل البريد (RFC 2045)، و Authorization: Basic لواجهات API (مستخدم:كلمةسر)، وملفات .pem ومفاتيح SSH، ومحتوى .docx و .xlsx )، والصور الرمزية في تخزين العميل، و data- attributes في الاختبارات الآلية. معرفة الترميز وفك الترميز بسرعة توفّر عليك فتح الطرفية لمجرد سلسلة واحدة.
ما ليس Base64
لا يُشفّر Base64 شيئًا: أي سلسلة مرمّزة تُفك في سطر واحد من الشيفرة. لا تستخدمه أبدًا لحماية كلمة مرور أو مفتاح API أو بيانات شخصية. وهو ليس ترميزًا ضاغطًا أيضًا: احتسب دائمًا زيادة 33 % في الحجم. وأخيرًا، لا يصلح Base64 للملفات المضغوطة الكثيفة أصلًا (PNG، ZIP) بعد بضعة ميغابايت، حيث يصبح تكلفة الذاكرة مؤذية.
الأداء وأفضل الممارسات
في المتصفح، TextEncoder و TextDecoder يعالجان عدة ميغابايت في الثانية؛ وخوارزمية Base64 بحد ذاتها خطية، بلا تكرار استدامي ولا تخصيص لكل حرف. قد تُبطئ الملفات الأكبر من 5 Mo الواجهة: لدفعات أكبر، فضّل المعالجة عبر Web Worker أو من جانب الخادم. احتفظ دائمًا بترميز المصدر موثَّقًا بجوار السلسلة، واختبر الذهاب والإياب (ترميز ثم فك ترميز) قبل تخزين أي نتيجة في قاعدة بيانات.
موصى به للفئات التالية
مطوّرو back-end وfront-end (رموز data URI ورؤوس HTTP)، والمُدمجون وكتّاب المحتوى التقني (SVG المضمّن وصور الخلفيات)، ومسؤولو النظام وDevOps (الشهادات والمفاتيح والتنزيلات)، ومختبرو الأمان (Authorization Basic واختبار معاملات)، والطلبة (فهم البايتات وASCII وUTF-8)، وكل من يحتاج إلى مُرمِّز ومفكك Base64 عبر الإنترنت سريع، شامل وخصوصي.