ما هو Base64؟ شرح الترميز
Base64 طريقة لتمثيل البيانات الثنائية — الصور والملفات والبايتات المشفّرة وأي شيء آخر — باستخدام 64 حرفاً قابلاً للطباعة فقط (A–Z وa–z و0–9 و+ و/). وُجد لأن كثيراً من القنوات صُممت للنص: البريد الإلكتروني وJSON وXML وعناوين URL وترويسات HTTP وملفات تعريف الارتباط تستطيع جميعها نقل سلسلة Base64 بأمان حيث كانت البايتات الخام ستتلف أو تُرفض.
يشرح هذا الدليل كيف يعمل الترميز، ومتى يكون الخيار الصحيح، والفرق بين Base64 وBase64URL، والأخطاء التي تنتج مخرجات مشوّهة — بما فيها الخطأ الأهم: Base64 ليس تشفيراً.
كيف يعمل ترميز Base64
يأخذ Base64 المدخلات ثلاثة بايتات (24 بت) في كل مرة ويقسمها إلى أربع مجموعات من ستة بتات. تُربط كل قيمة من ستة بتات (0–63) بحرف واحد من الأبجدية. ثلاثة بايتات تدخل وأربعة أحرف تخرج — ولهذا يكون ناتج Base64 دائماً أكبر من المدخل بنحو 33%.
وعندما لا يكون طول المدخل من مضاعفات الثلاثة، تُحشى المجموعة الأخيرة ببتات صفرية ويُلحق حرف «=» أو حرفان حتى يعرف مفكّك الترميز عدد البايتات الحقيقية المتوقعة.
Text: Hi!
Bytes: 01001000 01101001 00100001
Groups: 010010 000110 100100 100001
Index: 18 6 36 33
Base64: S G k h → "SGkh"
Text: Hi (2 bytes → one "=" of padding)
Base64: SGk=Base64 ليس تشفيراً
يستطيع أي شخص فك ترميز Base64 فوراً دون أي مفتاح — فهو ترميز قابل للعكس، مثل كتابة رقم بالنظام السداسي عشري. لا يخفي شيئاً. كلمة المرور أو مفتاح API أو الرمز «المحمي» بـ Base64 مكشوف لكل من يراه. استخدم تشفيراً حقيقياً (AES وTLS) لحماية البيانات، وBase64 لنقلها فقط.
متى تستخدم Base64
- تضمين الصور أو الخطوط الصغيرة في HTML أو CSS أو JSON كعناوين data: URI.
- إرسال محتوى ثنائي داخل حمولة JSON أو XML التي لا تحمل سوى النص.
- مصادقة HTTP Basic: تحمل الترويسة Base64 لـ «username:password» (للنقل فقط — وعبر HTTPS دائماً).
- رموز JWT وغيرها من الرموز التي تستخدم النسخة الآمنة لعناوين URL في ترويستها وحمولتها وتوقيعها.
- مرفقات البريد الإلكتروني (MIME) وأي بروتوكول قديم يتوقع نصاً بسبعة بتات.
- ليس للملفات الكبيرة عندما توجد قناة ثنائية — فالزيادة 33% وخطوة الترميز الإضافية هدر محض.
الفرق بين Base64 وBase64URL
يستخدم Base64 القياسي «+» و«/» ولكليهما معنى خاص في عناوين URL، وحشو «=» الذي غالباً ما يُرمَّز بالنسبة المئوية. أما Base64URL (RFC 4648 §5) فيستبدلهما بـ «-» و«_» ويحذف الحشو عادةً، فيمكن استخدام الناتج في عنوان URL أو اسم ملف أو رمز JWT دون تهريب إضافي. ومفكّك الترميز الذي يتوقع نسخة سيرفض الأخرى، وهذا أكثر أسباب فشل فك ترميز رمز «صالح» شيوعاً.
ترميز النصوص: انتبه إلى مجموعة الأحرف
يرمّز Base64 البايتات لا الأحرف، لذا يجب تحويل النص إلى بايتات أولاً — بـ UTF-8 في الغالبية الساحقة من الحالات. تصبح الأحرف العربية والهندية والرموز التعبيرية تسلسلات متعددة البايتات؛ وإذا استخدم المرمّز UTF-8 وافترض مفكّك الترميز Latin-1 (أو العكس) خرج النص مشوّهاً. عندما يختلف نظامان حول سلسلة Base64، فمجموعة الأحرف هي أول ما يجب فحصه.
لماذا يفشل فك الترميز
- أبجدية خاطئة — سلسلة Base64URL («-» و«_») تُمرَّر إلى مفكّك قياسي، أو العكس.
- حشو ناقص أو زائد — تحذف بعض المرمّزات «=»، بينما تشترط المفكّكات الصارمة طولاً من مضاعفات الأربعة.
- مسافات أو فواصل أسطر داخل السلسلة — يلفّ MIME الأسطر عند 76 حرفاً؛ أزلها قبل فك الترميز.
- ترميز مزدوج — سلسلة رُمّزت بـ Base64 مرتين تبدو صالحة لكنها تُفكّ إلى Base64 آخر.
- لم تكن Base64 أصلاً — قد يبدو Hex أو الهاش أو رمز عشوائي مشابهاً. يستخدم Base64 الأحرف الأربعة والستين بالضبط مع «=»، وطوله من مضاعفات الأربعة عند الحشو.
الأسئلة الشائعة
هل Base64 آمن؟
لا. إنه ترميز قابل للعكس دون مفتاح. لا يوفر أي سرّية على الإطلاق؛ استخدم التشفير لذلك.
لماذا ينتهي Base64 بـ «=» أو «==»؟
الحشو. تُعالج المدخلات في مجموعات من ثلاثة بايتات؛ وعندما يتبقى بايت أو بايتان يُلحق «==» أو «=» حتى يعرف مفكّك الترميز الطول الحقيقي.
كم يكبر ناتج Base64؟
بنحو 33% — كل 3 بايتات تصبح 4 أحرف. صورة بحجم 300 كيلوبايت تصبح نصاً بنحو 400 كيلوبايت.
هل يمكن لـ Base64 ترميز صورة أو ملف PDF؟
نعم — يعمل Base64 على أي بايتات. هكذا تضمّن عناوين data: URI الصور في HTML وهكذا تنتقل الملفات داخل واجهات JSON API.
ما الفرق بين Base64 وHex؟
كلاهما يمثّل البايتات كنص. يستخدم Hex 16 حرفاً ويضاعف الحجم (حرفان لكل بايت)؛ ويستخدم Base64 64 حرفاً ويزيد الحجم بالثلث. Hex أسهل في القراءة؛ وBase64 أكثر إيجازاً.
ما الفرق بين Base64 وترميز URL؟
ترميز URL (النسبة المئوية) يهرّب الأحرف غير الآمنة في عنوان URL فقط ويترك الأحرف العادية كما هي. أما Base64 فيعيد ترميز كل بايت. وكثيراً ما يُجمع بينهما: قد تحتاج سلسلة Base64 إلى ترميز بالنسبة المئوية قبل وضعها في معامل استعلام، ما لم تُستخدم النسخة الآمنة لعناوين URL.
الأدوات المذكورة في هذا الدليل
ترميز النصوص أو الملفات إلى Base64 (القياسي أو الآمن لعناوين URL) داخل متصفحك.
فكّ ترميز سلاسل Base64 أو Base64url إلى نص، مع إصلاح الحشو تلقائياً.
ترميز النص بالنسبة المئوية (percent-encoding) لاستخدامه بأمان في عناوين URL وسلاسل الاستعلام وبيانات النماذج.
تحويل النص إلى بايتات سداسية عشرية (UTF-8) مع فواصل مخصصة وحالة أحرف قابلة للتحديد.
تحويل النص إلى ثنائي (بتات) وإعادة الثنائي إلى نص.
فكّ ترميز ترويسة JWT وحمولته، وفحص المطالبات (claims) والتحقق من انتهاء الصلاحية — بالكامل داخل متصفحك.