Base64 هو واحدة من تلك الأشياء التي يستخدمها الجميع يومياً ولا يعرف أحد لماذا. تظهر في روابط الصور، وفي ترويسة Basic Authentication، وداخل كل JWT، وفي آلاف المتغيّرات البيئية. والمشكلة أن الاسم وحده يوحي بشيء لا يفعله أبداً: Base64 ليس تشفيراً، ولا حماية، ولا ضغطاً. هو فقط طريقة تمثيل، وفهم ذلك يوفّر عليك ساعات من الأخطاء.

ما هو فعلاً

البيانات الثنائية — صورة، ملف تنفيذي، بيانات مضغوطة — لا يمكن وضعها داخل نص كما هو. النص يخزَّن في أسطر، وله معنى لكل محرف. Base64 يحوّل كل ثلاثة بايتات إلى أربعة محارف نصّية من مجموعة محدّدة، فتصبح البيانات قابلة للنقل في أي مكان يقبل نصاً: JSON، روابط URL، ترويسات HTTP، البريد الإلكتروني.

كيف تُنقل البايتاتtext
Hello  →  5 بايتات خام
         →  S G V s b G 8 =        (8 محارف نصّية)

لاحظ: 3 بايتات  →  4 محارف
النمو دائماً 1 : 1.33، أي زيادة 33% في الحجم.
المجموعةالمحارفالطول
Base64 القياسيA–Z a–z 0–9 + /64 محرفاً + حشو =
Base64url (URL-safe)A–Z a–z 0–9 - _‎64 محرفاً بلا + ولا /
Radix-64 (base58)مبني على نظام Base58ي压缩 البايتات المتاحة

ما ليس هو: تشفير، ضغط، تجزئة

هنا الخلط الأكثر شيوعاً. Base64 ترميز، أي reversible بدون أي مفتاح. أي شخص يفك ترميز ما ترمّزته في أقل من ثانية:

في الطرفية — بلا أي مفتاحbash
echo "SGVsbG8=" | base64 -d
# الناتج: Hello

# وفي المتصفح
atob("SGVsbG8=")  // "Hello"
العمليةهل يمكن عكسها بلا مفتاح؟الغرض
Base64 (ترميز)نعم، دائماًتمثيل ثنائي كنص
Base64 (فك ترميز)— استرجاع البيانات الأصلية
التشفير (Encryption)لا، يحتاج مفتاحاًسرّية
التجزئة (Hashing)لا،单向سلامة البيانات
الضغط (Compression)لا، نعم لكن بطيءتصغير الحجم

كيف تستخدمه عملياً

  • تضمين صورة في صفحة HTML عبر data URI بدون ملف منفصل.
  • حمل بيانات ثنائية (رفع ملف، تنزيل) داخل JSON عبر REST API.
  • الترويسة Basic Authentication في بروتوكول HTTP — وهي تدمج اسم المستخدم وكلمة السر بالـ base64 ثم تضيفهما فقط، بلا تشفير.
  • الحمولة والـ header داخل JWT — وهذا سبب وجود base64url.
صورة مدمجة (data URI)html
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg==" alt="نقطة" width="300" height="200">

فك الترميز: الأدوات والأخطاء

فك الترميز بسيط، لكن مدخلاتهInspection محدّدة. القاعدة الذهبية: محارف أبجدية وحروف وأرقام، ونهايتها تحتمل = أو = =. ما عدا ذلك ليس base64 صالحاً. أداة فك الترميز الجيدة تتحقق من:

  • صحة المجموعة: حروف إنجليزية وأرقام فقط، بلا مسافات أو رموز أخرى.
  • طول سلسلة صالح: الطول يجب أن يكون من مضاعفات 4 (هذا ما يحدّد إذا كانت ناقصة حشواً).
  • نوع الترميز: قياسي أم base64url — hallmark: وجود - و _ يعني base64url.
  • قابلية القراءة: إن كان الناتج ثنائياً لا نصاً، falдо تبحث عن صورة أو ملف وليس عن كلمة.
تحقق قبل الفكjavascript
function isBase64(s) {
  const t = s.trim();
  return /^[A-Za-z0-9+/]*={0,2}$/.test(t) && t.replace(/=+$/, "").length % 4 !== 1;
}

function isBase64Url(s) {
  return /^[A-Za-z0-9_-]*={0,2}$/.test(s.trim());
}

متى لا تستخدمه

القاعدة العملية الأخيرة: Base64 أداة نقل، لا أداة حماية. حين تفهم أنه ترميز عكسي بلا مفتاح، تتوقف عن الاعتماد عليه لحفظ الأسرار، وتبدأ باستخدام التشفير حيث يلزم فعلاً.