ما هو 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 ليس تشفيراً

يستطيع أي شخص فك ترميز Base64 فوراً دون أي مفتاح — فهو ترميز قابل للعكس، مثل كتابة رقم بالنظام السداسي عشري. لا يخفي شيئاً. كلمة المرور أو مفتاح API أو الرمز «المحمي» بـ Base64 مكشوف لكل من يراه. استخدم تشفيراً حقيقياً (AES وTLS) لحماية البيانات، وBase64 لنقلها فقط.

جرّبها: مفكّك ترميز 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 دون تهريب إضافي. ومفكّك الترميز الذي يتوقع نسخة سيرفض الأخرى، وهذا أكثر أسباب فشل فك ترميز رمز «صالح» شيوعاً.

جرّبها: مرمّز URL جرّبها: مفكّك ترميز JWT

ترميز النصوص: انتبه إلى مجموعة الأحرف

يرمّز Base64 البايتات لا الأحرف، لذا يجب تحويل النص إلى بايتات أولاً — بـ UTF-8 في الغالبية الساحقة من الحالات. تصبح الأحرف العربية والهندية والرموز التعبيرية تسلسلات متعددة البايتات؛ وإذا استخدم المرمّز UTF-8 وافترض مفكّك الترميز Latin-1 (أو العكس) خرج النص مشوّهاً. عندما يختلف نظامان حول سلسلة Base64، فمجموعة الأحرف هي أول ما يجب فحصه.

جرّبها: مرمّز Base64 جرّبها: مرمّز Hex

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

  • أبجدية خاطئة — سلسلة Base64URL («-» و«_») تُمرَّر إلى مفكّك قياسي، أو العكس.
  • حشو ناقص أو زائد — تحذف بعض المرمّزات «=»، بينما تشترط المفكّكات الصارمة طولاً من مضاعفات الأربعة.
  • مسافات أو فواصل أسطر داخل السلسلة — يلفّ MIME الأسطر عند 76 حرفاً؛ أزلها قبل فك الترميز.
  • ترميز مزدوج — سلسلة رُمّزت بـ Base64 مرتين تبدو صالحة لكنها تُفكّ إلى Base64 آخر.
  • لم تكن Base64 أصلاً — قد يبدو Hex أو الهاش أو رمز عشوائي مشابهاً. يستخدم Base64 الأحرف الأربعة والستين بالضبط مع «=»، وطوله من مضاعفات الأربعة عند الحشو.

جرّبها: مفكّك ترميز 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) داخل متصفحك.

الترميز فتح الأداة

ترميز النص بالنسبة المئوية (percent-encoding) لاستخدامه بأمان في عناوين URL وسلاسل الاستعلام وبيانات النماذج.

الترميز فتح الأداة

تحويل النص إلى بايتات سداسية عشرية (UTF-8) مع فواصل مخصصة وحالة أحرف قابلة للتحديد.

الترميز فتح الأداة

فكّ ترميز ترويسة JWT وحمولته، وفحص المطالبات (claims) والتحقق من انتهاء الصلاحية — بالكامل داخل متصفحك.

الأمان فتح الأداة

أدلة أخرى

أدلة أخرى →
JSON والبيانات

ما هو JSON؟

شرح JSON بلغة مبسّطة: ما هو، وأنواع القيم الست، وقواعد الصياغة التي يخطئ فيها الكثيرون، وكيفية تنسيقه والتحقق منه، ومقارنته بـ XML وYAML.

وقت القراءة 4 دقائق
اختبار واجهات API

ما هو اختبار API؟ وكيف تختبر REST API

شرح اختبار API: ما هو، وما الذي تفحصه في كل طلب واستجابة، وطريقة خطوة بخطوة لاختبار REST API، والأخطاء الشائعة، وأدوات مجانية من متصفحك.

وقت القراءة 5 دقائق
تصميم الاختبارات

كيف تكتب حالات الاختبار (Test Cases)

كيف تكتب حالات اختبار موثوقة: الحقول التي تحتاجها كل حالة، ونموذج جاهز للنسخ، ومثال تسجيل الدخول، وتقنيات التصميم التي تكتشف الأخطاء الحقيقية.

وقت القراءة 4 دقائق
الأمان

ما هو JWT؟ شرح رموز JSON Web Token

شرح مبسّط لـ JWT: الأجزاء الثلاثة للرمز، والمطالبات مثل exp وsub، وكيفية فك ترميزه والتحقق منه، ولماذا فك الترميز ليس تحققاً، وقواعد الأمان.

وقت القراءة 4 دقائق
أدوات مساعدة

ما هو UUID؟ الفرق بين v4 وv7 وبين UUID وGUID وULID

شرح UUID: صيغة الـ 128 بت، والفرق بين v4 وv7، ولماذا v7 أفضل لمفاتيح قواعد البيانات، ومقارنة UUID بـ GUID وULID، واحتمال التصادم، والتوليد والتحقق.

وقت القراءة 4 دقائق
الويب

شرح رموز حالة HTTP

شرح كل فئة من رموز حالة HTTP مع الرموز التي تقابلها فعلاً — 200 و301 و400 و401 و403 و404 و422 و429 و500 و502 و503 و504 — وسبب كل منها وأيها تعيده.

وقت القراءة 4 دقائق