Base64 هو واحدة من تلك الأشياء التي يستخدمها الجميع يومياً ولا يعرف أحد لماذا. تظهر في روابط الصور، وفي ترويسة Basic Authentication، وداخل كل JWT، وفي آلاف المتغيّرات البيئية. والمشكلة أن الاسم وحده يوحي بشيء لا يفعله أبداً: Base64 ليس تشفيراً، ولا حماية، ولا ضغطاً. هو فقط طريقة تمثيل، وفهم ذلك يوفّر عليك ساعات من الأخطاء.
ما هو فعلاً
البيانات الثنائية — صورة، ملف تنفيذي، بيانات مضغوطة — لا يمكن وضعها داخل نص كما هو. النص يخزَّن في أسطر، وله معنى لكل محرف. Base64 يحوّل كل ثلاثة بايتات إلى أربعة محارف نصّية من مجموعة محدّدة، فتصبح البيانات قابلة للنقل في أي مكان يقبل نصاً: JSON، روابط URL، ترويسات HTTP، البريد الإلكتروني.
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 بدون أي مفتاح. أي شخص يفك ترميز ما ترمّزته في أقل من ثانية:
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.
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg==" alt="نقطة" width="300" height="200">فك الترميز: الأدوات والأخطاء
فك الترميز بسيط، لكن مدخلاتهInspection محدّدة. القاعدة الذهبية: محارف أبجدية وحروف وأرقام، ونهايتها تحتمل = أو = =. ما عدا ذلك ليس base64 صالحاً. أداة فك الترميز الجيدة تتحقق من:
- صحة المجموعة: حروف إنجليزية وأرقام فقط، بلا مسافات أو رموز أخرى.
- طول سلسلة صالح: الطول يجب أن يكون من مضاعفات 4 (هذا ما يحدّد إذا كانت ناقصة حشواً).
- نوع الترميز: قياسي أم base64url — hallmark: وجود - و _ يعني base64url.
- قابلية القراءة: إن كان الناتج ثنائياً لا نصاً، falдо تبحث عن صورة أو ملف وليس عن كلمة.
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 أداة نقل، لا أداة حماية. حين تفهم أنه ترميز عكسي بلا مفتاح، تتوقف عن الاعتماد عليه لحفظ الأسرار، وتبدأ باستخدام التشفير حيث يلزم فعلاً.