Skip to content
العودة إلى المدوّنة
دروس تعليمية

ما هو ترميز Base64؟ دليل المبتدئين

جديد على Base64؟ تعرّف على ماهية ترميز Base64، وكيف يعمل خطوة بخطوة، ولماذا يستخدمه المطورون — مقدمة سهلة مع أمثلة واضحة.

٨ دقائق قراءة

فهم ترميز Base64

جديد على Base64؟ أنت في المكان الصحيح. يشرح هذا الدليل المبسّط ماهية Base64، وكيف يعمل خطوة بخطوة، وأين ستصادفه كمطور. للموضوعات المتقدمة مثل ترميز MIME وعناوين URL للبيانات وتحسين الأداء واعتبارات الأمان، راجع دليل Base64 المتقدم.

ترميز Base64 هو تقنية أساسية تُستخدم في تطوير البرمجيات الحديثة. سواء كنت تضمّن صورًا في HTML، أو تنقل بيانات ثنائية عبر بروتوكولات نصية، أو تعمل مع واجهات API، فإن فهم Base64 أمر ضروري.

ما هو Base64؟

Base64 هو نظام ترميز من ثنائي إلى نصي يمثل البيانات الثنائية بتنسيق سلسلة نصية ASCII. يستخدم مجموعة من 64 حرفًا (A-Z، a-z، 0-9، +، /) لتمثيل البيانات، مع استخدام = للحشو.

يأتي اسم “Base64” من حقيقة أنه يستخدم بالضبط 64 حرف ASCII قابل للطباعة كأبجديته. نشأ النظام في الأيام الأولى للبريد الإلكتروني، عندما احتاج معيار MIME (امتدادات بريد الإنترنت متعددة الأغراض) إلى طريقة موثوقة لإرفاق ملفات ثنائية — كالصور والمستندات — برسائل البريد الإلكتروني التي لم تكن تتعامل إلا مع نص ASCII ذي 7 بت. تم تعريف Base64 رسميًا في RFC 4648، وتعود جذوره إلى مواصفة PEM (البريد المعزز الخصوصية) من أواخر الثمانينيات. ومنذ ذلك الحين، أصبح من أكثر طرق الترميز اعتمادًا في الحوسبة.

لماذا نستخدم Base64؟

  1. نقل البيانات: العديد من البروتوكولات تدعم البيانات النصية فقط. يتيح Base64 نقل المحتوى الثنائي بأمان.
  2. عناوين URI للبيانات: تضمين الصور أو الملفات الصغيرة مباشرة في HTML/CSS باستخدام عناوين URI للبيانات.
  3. حمولات API: إرسال بيانات ثنائية في حمولات JSON بدون مشاكل ترميز.
  4. مرفقات البريد الإلكتروني: يستخدم ترميز MIME نظام Base64 للمرفقات.

لجعل هذا أكثر وضوحًا، إليك سيناريوهات يومية يُستخدم فيها Base64:

  • مرفقات البريد الإلكتروني (MIME): عند إرفاق PDF أو صورة ببريد إلكتروني، يرمّز عميل البريد الملف بـ Base64 ويضمّنه في جسم الرسالة ككتلة نصية. يفكّ عميل المستقبل الترميز ليعيده إلى الملف الأصلي.
  • تضمين الصور في HTML/CSS: بدلًا من الربط بصورة خارجية، يمكنك تضمينها مباشرة كعنوان URL للبيانات: <img src="data:image/png;base64,iVBOR...">. هذا يلغي طلب HTTP إضافي، وهو مفيد للأيقونات الصغيرة والرسوم المتحركة.
  • تخزين البيانات الثنائية في JSON/XML: JSON وXML تنسيقات نصية لا تستطيع تمثيل البايتات الخام بشكل أصلي. يتيح لك Base64 تضمين محتوى ثنائي — مثل الصور المصغرة أو مفاتيح التشفير أو الشهادات — كحقل سلسلة نصية عادي.
  • المصادقة الأساسية عبر HTTP: ترويسة Authorization ترمّز بيانات الاعتماد كـ Basic base64(username:password). مثلًا، user:pass تصبح Basic dXNlcjpwYXNz. لاحظ أن هذا ترميز وليس تشفيرًا — استخدم دائمًا HTTPS بجانبه.

كيف يعمل Base64

يعمل ترميز Base64 بأخذ كل 3 بايتات (24 بت) من البيانات الثنائية وتحويلها إلى 4 أحرف (6 بت لكل منها):

Original:   01001101 01100001 01101110  (3 bytes = "Man")
Split:      010011 010110 000101 101110  (4 groups of 6 bits)
Base64:     T      W      F      u       (4 characters)

مثال خطوة بخطوة: ترميز “Hi”

لنتتبع ترميز السلسلة النصية القصيرة “Hi” لنرى بالضبط ما يحدث في كل مرحلة:

1. الحصول على قيم ASCII:

  • H = 72، i = 105

2. التحويل إلى ثنائي 8 بت:

  • H = 01001000، i = 01101001

3. ربط جميع البتات:

  • 01001000 01101001 (16 بت إجمالًا)

4. التقسيم إلى مجموعات من 6 بت (مع حشو بالأصفار لملء المجموعة الأخيرة):

  • 010010 000110 100100
  • البتات الأصلية 16 تحتاج 3 مجموعات من 6 (= 18 بت)، لذا يُضاف بتان صفريان.

5. ربط كل قيمة 6 بت بأبجدية Base64:

  • 010010 = 18 → S
  • 000110 = 6 → G
  • 100100 = 36 → k

6. إضافة الحشو: بما أن المدخل كان 2 بايت (ليس من مضاعفات 3)، يُضاف = واحد.

النتيجة: SGk=

قاعدة الحشو بسيطة: إذا كان طول المدخل mod 3 يساوي 1، أضف ==؛ إذا كان 2، أضف =؛ إذا كان 0، لا حاجة للحشو.

المزالق الشائعة

زيادة الحجم

يزيد Base64 حجم البيانات بحوالي 33%. صورة بحجم 1 ميجابايت تصبح حوالي 1.37 ميجابايت بعد ترميز Base64 (يعتمد الحمل الزائد الدقيق على فواصل الأسطر والحشو). للأصول الصغيرة كالأيقونات هذا لا يُذكر، لكن للملفات الكبيرة يتراكم التضخم بسرعة — فيديو بحجم 10 ميجابايت يصبح أكثر من 13 ميجابايت. فكّر فيما إذا كانت راحة التضمين المباشر تفوق تكلفة الحجم.

ليس تشفيرًا

Base64 هو ترميز وليس تشفيرًا. لا يوفر أي أمان ويمكن فك ترميزه بسهولة. يمكن لأي شخص عكسه فورًا — في JavaScript، atob('SGVsbG8=') تعيد "Hello". لا تستخدم Base64 أبدًا لإخفاء كلمات المرور أو الرموز أو البيانات الحساسة. إذا كنت بحاجة إلى السرية، استخدم تشفيرًا حقيقيًا (AES، RSA، إلخ).

أمان عناوين URL

يستخدم Base64 القياسي + و/ اللذين لهما معنى خاص في عناوين URL ومعلمات الاستعلام. مثلًا، data+test/value في Base64 القياسي سيكسر معلمة URL. يستبدل Base64 الآمن لعناوين URL + بـ - و/ بـ _، منتجًا سلاسل نصية مثل data-test_value يمكن استخدامها بأمان في عناوين URL بدون ترميز النسبة المئوية. معظم اللغات توفر متغيرًا آمنًا لعناوين URL — استخدمه كلما ظهرت مخرجات Base64 في عنوان URL.

Base64 في لغات البرمجة المختلفة

معظم اللغات تتضمن دعمًا مدمجًا لـ Base64. إليك مثالين شائعين:

// JavaScript (browser and Node.js)
btoa('Hello')     // "SGVsbG8="
atob('SGVsbG8=')  // "Hello"
# Python
import base64
base64.b64encode(b'Hello').decode()   # 'SGVsbG8='
base64.b64decode('SGVsbG8=').decode()  # 'Hello'
// Go
package main

import (
    "encoding/base64"
    "fmt"
)

func main() {
    encoded := base64.StdEncoding.EncodeToString([]byte("Hello"))
    fmt.Println(encoded) // "SGVsbG8="

    decoded, _ := base64.StdEncoding.DecodeString("SGVsbG8=")
    fmt.Println(string(decoded)) // "Hello"

    // URL-safe variant
    urlEncoded := base64.URLEncoding.EncodeToString([]byte("Hello?World"))
    fmt.Println(urlEncoded) // "SGVsbG8/V29ybGQ="
}

في JavaScript، تقوم btoa() (من ثنائي إلى ASCII) بالترميز وatob() (من ASCII إلى ثنائي) بفك الترميز. لاحظ أن btoa() تتعامل فقط مع أحرف Latin-1؛ للسلاسل النصية بترميز Unicode، تحتاج إلى ترميزها إلى UTF-8 أولًا. وحدة base64 في Python تعمل مع كائنات البايتات، لذا ترمّز السلسلة النصية إلى بايتات بـ b'...' أو .encode() قبل تمريرها. حزمة encoding/base64 في Go توفر كلًا من StdEncoding وURLEncoding جاهزين، مما يسهّل اختيار المتغير المناسب لحالة استخدامك. معظم اللغات الأخرى — Java وC# وRuby وPHP — توفر واجهات برمجة مماثلة بسطر واحد في مكتباتها القياسية.

استخدام أداة Base64 لدينا

تسهّل أداة مرمّز/مفكّك Base64 ما يلي:

  • ترميز النص أو الملفات إلى Base64
  • فك ترميز سلاسل Base64 النصية
  • توليد عناوين URI للبيانات للتضمين في الويب
  • التعامل مع متغيرات الترميز الآمنة لعناوين URL

الأسئلة الشائعة

ما استخدامات Base64؟

يُستخدم Base64 لنقل البيانات الثنائية عبر قنوات نصية فقط. أكثر الاستخدامات شيوعًا هي تضمين الصور في HTML/CSS عبر عناوين URI للبيانات، وترميز مرفقات البريد الإلكتروني (MIME)، وإرسال حمولات ثنائية في واجهات JSON API، وترميز بيانات الاعتماد في ترويسات المصادقة الأساسية عبر HTTP. كلما دعم بروتوكول أو تنسيق نص ASCII فقط لكنك تحتاج إلى تضمين محتوى ثنائي، يكون Base64 الحل القياسي.

هل Base64 نفس التشفير؟

لا. Base64 هو ترميز وليس تشفيرًا — لا يوفر أي أمان. يمكن لأي شخص فك ترميز سلسلة Base64 فورًا باستخدام دوال المتصفح المدمجة مثل atob() أو أدوات سطر الأوامر. لا تستخدم Base64 أبدًا لإخفاء كلمات المرور أو مفاتيح API أو البيانات الحساسة. إذا كنت بحاجة إلى السرية، استخدم خوارزميات تشفير حقيقية مثل AES-256 أو RSA، وانقل دائمًا عبر HTTPS.

لماذا يزيد Base64 حجم الملف بنسبة 33%؟

يربط Base64 كل 3 بايتات من المدخلات بـ 4 أحرف ASCII من المخرجات. بما أن 4/3 = 1.333، فإن المخرجات المرمّزة تكون دائمًا أكبر بحوالي 33% من البيانات الثنائية الأصلية. هذا الحمل الزائد مقبول للأصول الصغيرة (الأيقونات، الصور المصغرة) لكنه يتراكم للملفات الكبيرة — صورة 10 ميجابايت تصبح حوالي 13.3 ميجابايت بعد الترميز. للملفات الكبيرة، النقل الثنائي المباشر عادة أكثر كفاءة.

ما الفرق بين Base64 القياسي و Base64 الآمن لعناوين URL؟

يستخدم Base64 القياسي + و/ كحرفيه 62 و63، لكن لهما معانٍ خاصة في عناوين URL. يستبدلهما Base64 الآمن لعناوين URL (المعرّف في RFC 4648 القسم 5) بـ - و_، منتجًا سلاسل نصية يمكن استخدامها مباشرة في عناوين URL وأسماء الملفات بدون ترميز النسبة المئوية. استخدم Base64 الآمن لعناوين URL لرموز JWT ومعلمات URL وأي سياق تظهر فيه السلسلة المرمّزة في عنوان URL.

هل يمكن لـ Base64 التعامل مع نص Unicode مثل الصينية أو الرموز التعبيرية؟

ليس مباشرة. دالة btoa() في JavaScript تقبل أحرف Latin-1 فقط. لترميز نص Unicode بـ Base64، حوّله أولًا إلى بايتات UTF-8 باستخدام TextEncoder، ثم رمّز تلك البايتات. في Python، استدعِ .encode('utf-8') قبل تمريره إلى base64.b64encode(). هذه العملية ذات الخطوتين تضمن الحفاظ على الأحرف متعددة البايتات بشكل صحيح عبر دورة الترميز/فك الترميز.

الخلاصة

Base64 هو نظام ترميز متعدد الاستخدامات يجب على كل مطور فهمه. استخدمه عندما تحتاج إلى نقل بيانات ثنائية عبر قنوات نصية فقط، لكن تذكر أنه ليس إجراءً أمنيًا ويزيد حجم البيانات.


مستعد للتعمق أكثر؟ اطلع على دليل Base64 المتقدم: من MIME إلى عناوين URL للبيانات للأنماط التطبيقية الواقعية، وأمثلة الكود بلغتي JavaScript وPython، ونصائح تحسين الأداء، واعتبارات الأمان.

مقالات ذات صلة

عرض جميع المقالات