العربية
  • base64
  • encoding

كل ما تحتاج معرفته حول Base64

تعرف على عالم تشفير Base64 بعمق. تعلم تاريخه، وكيف يعمل، ومتى تستخدمه، وما هي حدوده. معرفة أساسية لكل مطور يتعامل مع تشفير البيانات ونقلها.

Yijun
Yijun
Developer

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

ما هو Base64؟

Base64 هو طريقة ترميز تمثل البيانات الثنائية باستخدام 64 حرفًا قابلًا للطباعة. هذه الأحرف الـ 64 تشمل:

  • A-Z ، a-z ، 0-9 (62 حرفًا ورقمًا)
  • + و / (حرفان خاصان)
  • = (تستخدم للتعبئة)

في عملنا اليومي في التطوير، يعتبر Base64 موجودًا في كل مكان. قد تكون قد واجهته في السيناريوهات التالية:

  • تضمين الصور الصغيرة أو الأيقونات في HTML
  • نقل البيانات الثنائية في استجابات API
  • ترميز مرفقات البريد الإلكتروني

على سبيل المثال، قد تكون قد رأيت رمز HTML مثل هذا:

السلسلة الطويلة هنا هي صورة صغيرة مشفرة بطريقة Base64.

لماذا Base64؟

لفهم سبب وجود Base64، نحتاج إلى النظر إلى تاريخ تطوير الكمبيوتر في الأيام الأولى.

في الأيام الأولى لشبكات الكمبيوتر، كانت معظم الأنظمة تستطيع التعامل فقط مع الأحرف القابلة للطباعة في ASCII. يستخدم ترميز ASCII فقط 7 بتات من البيانات الثنائية، ممثلة بـ 128 حرفًا. هذا يعمل بشكل جيد للتعامل مع النصوص باللغة الإنجليزية، ولكن تنشأ المشاكل عند نقل البيانات الثنائية (مثل الصور أو الملفات الصوتية).

قد تفسر الأنظمة المختلفة بعض الأحرف التحكمية بشكل مختلف، مما يؤدي إلى تلف البيانات أثناء النقل. على سبيل المثال، قد تغير بعض الأنظمة فواصل الأسطر من LF (Line Feed) إلى CR (Carriage Return) + LF، مما سيكون كارثيًا للبيانات الثنائية.

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

في الواقع، قبل Base64، كانت هناك طرق ترميز بـ Base16 (باستخدام 16 حرفًا) وBase32 (باستخدام 32 حرفًا). ومع ذلك، توصل Base64 إلى أفضل توازن بين كفاءة الترميز والعملية، مما جعله الطريقة الأكثر انتشارًا في الترميز.

كيف يعمل ترميز Base64

الفكرة الأساسية في Base64 هي ترميز 3 بايتات (24 بت) من البيانات الثنائية إلى 4 أحرف قابلة للطباعة.

دعونا نفهم هذه العملية من خلال مثال ملموس.

لنفرض أننا نريد ترميز السلسلة "Logto":

  1. أولاً، نقوم بتحويل "Logto" إلى رمز ASCII:
  • L: 76 (01001100)
  • o: 111 (01101111)
  • g: 103 (01100111)
  • t: 116 (01110100)
  • o: 111 (01101111)
  1. نقوم بدمج هذه الأرقام الثنائية (بإجمالي 5 بايتات، 40 بتًا): 0100110001101111011001110111010001101111

  2. نقسم هذه البتات إلى مجموعات من 6 بتات (لاحظ أن المجموعة الأخيرة تحتوي فقط على 4 بتات): 010011 | 000110 | 111101 | 100111 | 011101 | 000110 | 1111

  3. بما أن المجموعة الأخيرة تحتوي فقط على 4 بتات، نحتاج إلى إضافة اثنين من الأصفار في النهاية لجعلها 6 بتات: 010011 | 000110 | 111101 | 100111 | 011101 | 000110 | 111100

  4. نحول كل مجموعة من 6 بتات إلى عشري: 19 | 6 | 61 | 39 | 29 | 6 | 60

  5. وفقًا لجدول Base64 encoding، نقوم بتحويل هذه الأرقام إلى الأحرف المقابلة لها: T | G | 9 | n | d | G | 8

  6. أخيرًا، لأن ترميز Base64 دائمًا يقوم بترميز 3 بايتات (24 بت) من البيانات الثنائية إلى 4 أحرف قابلة للطباعة، و "Logto" تتحول إلى 5 بايتات في الثنائي، يتم ترميز أول 3 بايتات كـ TG9n، وآخر 2 بايت يتم ترميزها كـ dG8. لذلك، نحتاج إلى إضافة حرف = واحد كحرف تعبئة في النهاية.

وبالتالي، فإن نتيجة ترميز Base64 لـ "Logto" هي TG9ndG8=.

في Node.js، يمكننا توليد ترميز Base64 مثل هذا:

هذا المثال يوضح عدة خصائص هامة لترميز Base64:

  • كل 3 بايتات من المدخلات تنتج 4 أحرف من المخرجات.
  • عندما لا يكون عدد بايتات المدخلات من مضاعفات 3، يتم استخدام أحرف التعبئة "=". في هذا المثال، لدينا 5 بايتات مدخلات، مما ينتج 7 أحرف Base64 و1 حرف تعبئة.
  • يمكن لعدد أحرف التعبئة أن يخبرنا بالعدد الدقيق للبايتات في البيانات الأصلية:
    • بدون تعبئة: البيانات الأصلية تكون من مضاعفات 3 بايتات
    • 1 =: تمت إضافة 2 بِت صفرية إلى البيانات الأصلية قبل الترميز
    • 2 =: تمت إضافة 4 بِت صفرية إلى البيانات الأصلية قبل الترميز

متى ولماذا تستخدم Base64

Base64 مفيد بشكل خاص في السيناريوهات التالية:

  1. تضمين البيانات الثنائية الصغيرة (مثل الصور الصغيرة أو الأيقونات) في HTML
  2. نقل البيانات الثنائية في البروتوكولات التي تُنقل فيها النصوص فقط
  3. نقل البيانات في الأنظمة التي لديها قيود على الأحرف الخاصة
  4. غموض بيانات بسيط (ملاحظة: هذا ليس تشفيرًا!)

المزايا الرئيسية لاستخدام Base64 هي:

  • توافق جيد بين الأنظمة: يمكن تحليل البيانات المشفرة بـ Base64 بشكل صحيح في أي نظام يدعم ASCII
  • يمكن أن يحسن من كفاءة النقل في بعض الحالات: على سبيل المثال، عندما تحتوي البيانات المنقولة على عدد كبير من الأنماط الثنائية المتكررة

إلى جانب Base64 القياسية، هناك بعض المتغيرات التي تستحق المعرفة:

  • Base64 الآمنة لـ URL: استبدال + بـ - و/ بـ _، وإزالة =. يمكن استخدام هذا الترميز مباشرة في عناوين URL دون الحاجة إلى ترميز إضافي.

حدود واعتبارات Base64

على الرغم من فائدة Base64، إلا أنه يمتلك بعض الحدود:

  1. تضخم البيانات: يزيد ترميز Base64 حجم البيانات بحوالي 33%. بالنسبة لكميات كبيرة من البيانات، يمكن أن يؤدي ذلك إلى عواقب كبيرة على التخزين وعرض النطاق الترددي.

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

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

  4. القابلية للقراءة: البيانات المشفرة بـ Base64 غير قابلة للقراءة الإنسانية. هذا يمكن أن يجعل عملية تصحيح الأخطاء صعبة.

عند استخدام Base64 في التطبيقات الكبيرة، ضع في اعتبارك استراتيجيات التحسين التالية:

  • ترميز Base64 للبيانات الضرورية فقط
  • النظر في استخدام مكتبات ترميز/ فك ترميز Base64 المتخصصة، حيث غالبًا ما تكون أكثر كفاءة من المكتبات العامة الغرض
  • تنفيذ ترميز/ فك ترميز Base64 على الجانب العميل لتقليل الحمل على الخادم

الاستنتاج

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

تذكر، كباقي الأدوات التقنية، المفتاح هو استخدام Base64 في الوقت المناسب وفي المكان المناسب. أتمنى لك التوفيق في رحلتك البرمجية!