تطوير · مدة القراءة: 3 د ·

Base64 بشرح مبسّط: فيمَ يُستخدم، ولماذا ليس تشفيرًا

يظهر Base64 في البريد الإلكتروني وdata URI وترويسات API وJWT. كيف يعمل، ولماذا يكبّر البيانات بمقدار الثلث، ولماذا لا يخفي شيئًا أبدًا.

Base64 موجود في كل مكان في البرمجيات: مرفقات البريد الإلكتروني، والصور المضمّنة في CSS، وترويسة Authorization في مصادقة HTTP Basic، وأجزاء JWT. له مهمة واحدة: كتابة أي بيانات، بما فيها البايتات الثنائية، باستخدام محارف نصية آمنة فقط.

كيف يعمل

يأخذ Base64 البيانات ثلاثة بايتات (24 بت) في كل مرة ويقسّمها إلى أربع مجموعات من 6 بتات. كل مجموعة رقم من 0 إلى 63 يقابل أحد 64 محرفًا: A-Z وa-z و0-9 و+ و/. وعندما لا ينقسم المدخل إلى مجموعات ثلاثية، تُكمل علامات = النهاية.

النص    M        a        n
البايتات 01001101 01100001 01101110
6 بتات   010011 010110 000101 101110
Base64  T      W      F      u       →  TWFu

لماذا وُجد

صُممت أنظمة قديمة كثيرة، وعلى رأسها البريد الإلكتروني، للنصوص، وكان بإمكانها إتلاف البايتات العشوائية. يحوّل Base64 أي شيء إلى محارف عادية تمر عبر تلك القنوات دون تغيير. الثمن هو الحجم: كل 3 بايتات تصبح 4 محارف، فتكبر البيانات المرمّزة بنحو 33%.

إنه ليس تشفيرًا

لا يوجد مفتاح. يستطيع أي شخص فك ترميز Base64 فورًا، لذلك لا يخفي شيئًا. كلمة المرور في ترويسة Basic ‏(⁦dXNlcjpwYXNz⁩ هي ببساطة ⁦user:pass⁩) مكشوفة تمامًا مثل النص العادي. احمِ الأسرار باستخدام HTTPS وتشفير حقيقي، ولا تعامل Base64 أبدًا كإجراء أمني.

متغيّرات ستصادفها

يستبدل Base64url الرمزين + و/ بـ - و_ ويحذف الحشو عادةً، فتصبح النتيجة آمنة في عناوين URL وأسماء الملفات؛ ويستخدمه JWT. أما data URI فتضع البيانات المرمّزة مباشرة في الشيفرة، مثل ⁦data:image/png;base64,iVBOR…⁩، وهذا يوفّر طلبًا للصور الصغيرة جدًا لكنه يثقل الصور الكبيرة.

الحجم بالأرقام

طول البيانات المرمّزة هو 4 × ceil(n / 3) محرفًا لعدد n من البايتات، أي أن الزيادة نحو 33%، إضافة إلى فواصل الأسطر إن أضافها المرمّز.

صورة 100 كيلوبايت   →  نحو 133 كيلوبايت من Base64
مرفق 1 ميغابايت     →  نحو 1.33 ميغابايت (مع فواصل الأسطر في البريد)

لماذا يفشل فك الترميز

  • حشو مفقود: بعض الأنظمة تحذف علامات = في النهاية، فترفض المفكّكات الصارمة المدخلات. أضف = حتى يصبح الطول من مضاعفات 4.
  • الأبجدية الخاطئة: يستخدم Base64url الرمزين - و _ بدل + و /. فكّه بمفكّك Base64url أو أعد استبدال المحارف أولًا.
  • فواصل الأسطر والمسافات: البريد (MIME) يقسم Base64 كل 76 محرفًا. معظم المفكّكات تتجاهل الفواصل، لكن ليس كلها.
  • نص بترميز خاطئ: فك الترميز يعطيك بايتات. إذا كانت نصًا بترميز UTF-8 وقُرئت على أنها Latin-1، تتحول العربية والعبرية والحروف المشكولة إلى رموز غير مفهومة.

فخ btoa في JavaScript

الدالة المدمجة btoa() في المتصفح لا تقبل إلا محارف Latin-1، وتُطلق خطأ مع العربية أو العبرية أو الصينية أو الرموز التعبيرية. رمّز النص أولًا إلى بايتات UTF-8، مثلًا باستخدام TextEncoder، ثم إلى Base64.

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

Base64 هو الأداة المناسبة عندما يجب أن تمر بيانات ثنائية عبر قناة مصممة للنص: حمولات JSON و XML والبريد و Data URI وترويسات HTTP. وهو الأداة الخاطئة لإخفاء البيانات، ولتصغيرها (فهي تكبر دائمًا)، ولتخزين ملفات كبيرة في قاعدة بيانات، حيث يكون العمود الثنائي أو تخزين الكائنات أصغر وأسرع. إذا كانت الجهة المستقبلة تقبل بايتات خامًا، فأرسل بايتات خامًا.

جرّبه

يحوّل مرمّز Base64 من 4Dev النص إلى Base64 أثناء الكتابة. يستخدم UTF-8، لذلك تُرمَّز العربية والرموز التعبيرية وأي نص غير إنجليزي بشكل صحيح. وللاتجاه المعاكس استخدم أداة فك ترميز Base64.

افتح مرمّز Base64

LinkedInXFacebook