ترميز Base64 هو عملية تحويل البيانات الثنائية إلى تنسيق سلسلة ASCII عن طريق تحويل تلك البيانات الثنائية إلى تمثيل حرف 6 بت. يتم استخدام طريقة Base64 للتشفير عندما يتم نقل البيانات الثنائية ، مثل الصور أو الفيديو ، عبر أنظمة مصممة لنقل البيانات بتنسيق نص عادي (ASCII).
لماذا يتم استخدام ترميز Base64؟
تأتي الحاجة إلى ترميز Base64 من المشاكل التي تحدث عندما يتم نقل الوسائط بتنسيق ثنائي خام إلى أنظمة قائمة على النص.
نظرًا لأن الأنظمة القائمة على النص (مثل البريد الإلكتروني) تفسر البيانات الثنائية على أنها مجموعة واسعة من الأحرف ، بما في ذلك أحرف الأوامر الخاصة ، فإن الكثير من البيانات الثنائية التي يتم إرسالها لنقل الوسائط يتم تفسيرها بشكل خاطئ من قبل تلك الأنظمة ويتم فقدها أو تلفها في عملية النقل
إحدى طرق ترميز هذا النوع من البيانات الثنائية بطريقة تتجنب مشاكل الإرسال هذه هي إرسالها كنص ASCII عادي بتنسيق Base64 المشفر. هذه إحدى التقنيات المستخدمة بواسطة معيار MIME لإرسال بيانات غير النص العادي.
تتضمن العديد من لغات البرمجة ، مثل PHP و Javascript ، وظائف تشفير وفك تشفير Base64 من أجل تفسير البيانات المنقولة باستخدام تشفير Base64.
منطق ترميز Base64
ترميز Base64 يكسر البيانات الثنائية إلى مقاطع 6 بت من 3 بايتات كاملة ويمثل تلك كأحرف قابلة للطباعة في معيار ASCII. يفعل ذلك في خطوتين أساسيتين.
الخطوة الأولى هي تقسيم السلسلة الثنائية إلى كتل 6 بت. يستخدم Base64 6 بت فقط (المقابلة لـ 2 ^ 6=64 حرفًا) للتأكد من أن البيانات المشفرة قابلة للطباعة وقابلة للقراءة البشرية. لا يتم استخدام أي من الأحرف الخاصة المتوفرة في ASCII.
64 حرفًا (ومن هنا جاء اسم Base64) هي 10 أرقام و 26 حرفًا صغيرًا و 26 حرفًا كبيرًا بالإضافة إلى علامة الجمع (+) والشرطة المائلة للأمام (/). يوجد أيضًا الحرف 65 المعروف باسم اللوحة ، وهو علامة المساواة (=). يتم استخدام هذا الحرف عندما لا يحتوي الجزء الأخير من البيانات الثنائية على 6 بتات كاملة.
مثال تشفير Base64
على سبيل المثال ، خذ ثلاثة أرقام ASCII 155 و 162 و 233. تشكل هذه الأرقام الثلاثة دفقًا ثنائيًا من 100110111010001011101001. يحتوي الملف الثنائي ، مثل الصورة ، على دفق ثنائي يعمل لعشرات أو مئات الآلاف من الأصفار وأخرى.
يبدأ مشفر Base64 بتقسيم الدفق الثنائي إلى مجموعات من ستة أحرف: 100110 111010 001011 101001. تُترجم كل مجموعة من هذه المجموعات إلى الأرقام 38 و 58 و 11 و 41.
يتحول التدفق الثنائي المكون من ستة أحرف بين الأحرف الثنائية (أو الأساس -2) إلى الأحرف العشرية (الأساس -10) عن طريق تربيع كل قيمة ممثلة بـ 1 في التسلسل الثنائي مع مربعها الموضعي.بدءًا من اليمين والتحرك إلى اليسار ، بدءًا من الصفر ، تمثل القيم في الدفق الثنائي 2 ^ 0 ، ثم 2 ^ 1 ، ثم 2 ^ 2 ، ثم 2 ^ 3 ، ثم 2 ^ 4 ، ثم 2 ^ 5.
هذه طريقة أخرى للنظر إليها. بدءًا من اليسار ، يستحق كل موضع 1 و 2 و 4 و 8 و 16 و 32. إذا كان الرقم الثنائي يحتوي على 1 في الفتحة ، فأنت تضيف هذه القيمة ؛ إذا كان يحتوي على 0 في الفتحة ، فلا يمكنك ذلك. تتحول السلسلة الثنائية 100110 إلى الرقم العشري 38: 02 ^ 01 + 12 ^ 1 + 12 ^ 2 + 02 ^ 3 + 02 ^ 4 + 12 ^ 5=0 + 2 + 4 + 0 + 0 + 32.
تشفير Base64 يأخذ هذه السلسلة الثنائية ويقسمها إلى قيم 6 بت 38 و 58 و 11 و 41.
أخيرًا ، يتم تحويل هذه الأرقام إلى أحرف ASCII باستخدام جدول تشفير Base64. تترجم قيم 6 بت لهذا المثال إلى تسلسل ASCII m6Lp.
باستخدام جدول التحويل Base64:
- 38 هو م
- 58 هو 6
- 11 هو L
- 41 هو p
يتم تطبيق هذه العملية المكونة من خطوتين على السلسلة الثنائية المشفرة بالكامل.
لضمان إمكانية طباعة البيانات المشفرة بشكل صحيح وعدم تجاوز أي حد لطول سطر خادم البريد ، يتم إدخال أحرف سطر جديد للحفاظ على أطوال السطور أقل من 76 حرفًا. يتم ترميز أحرف السطر الجديد مثل جميع البيانات الأخرى.
الغرض الكامل من ترميز Base64 ، من إضافة حشوة للاحتفاظ بالمقاطع الثنائية ثلاثية البايت إلى تحويل ثنائي إلى نص باستخدام جدول Base64 ، هو الحفاظ على تكامل المعلومات الثنائية المرسلة.
Base64 جدول ترميز
يترجم الجدول التالي جميع الأحرف الـ 64 المستخدمة في ترميز Base64.
Base64 جدول ترميز | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
قيمة | Char | قيمة | Char | قيمة | Char | قيمة | Char | |||
0 | ا | 16 | س | 32 | ز | 48 | w | |||
1 | ب | 17 | R | 33 | ح | 49 | س | |||
2 | C | 18 | S | 34 | i | 50 | y | |||
3 | D | 19 | T | 35 | ي | 51 | z | |||
4 | E | 20 | U | 36 | ك | 52 | 0 | |||
5 | و | 21 | V | 37 | l | 53 | 1 | |||
6 | G | 22 | W | 38 | م | 54 | 2 | |||
7 | H | 23 | X | 39 | 55 | 3 | ||||
8 | أنا | 24 | Y | 40 | o | 56 | 4 | |||
9 | J | 25 | Z | 41 | p | 57 | 5 | |||
10 | K | 26 | a | 42 | q | 58 | 6 | |||
11 | L | 27 | ب | 43 | r | 59 | 7 | |||
12 | م | 28 | ج | 44 | ق | 60 | 8 | |||
13 | N | 29 | د | 45 | ر | 61 | 9 | |||
14 | O | 30 | ه | 46 | u | 62 | + | |||
15 | P | 31 | و | 47 | v | 63 | / |
حل لعبة النهاية
في نهاية عملية الترميز ، قد تكون هناك مشكلة. إذا كان حجم البيانات الأصلية بالبايت مضاعفًا لثلاثة ، فكل شيء يعمل بشكل جيد. إذا لم يكن كذلك ، فقد يكون هناك بايت فارغ. للترميز الصحيح ، مطلوب بالضبط 3 بايت من البيانات الثنائية.
الحل هو إلحاق عدد كافٍ من البايت بقيمة 0 لإنشاء مجموعة مكونة من 3 بايت. يتم إلحاق اثنين من هذه القيم إذا كانت البيانات بحاجة إلى بايت واحد إضافي من البيانات ، يتم إلحاق واحد لبايتين إضافيين.
بالطبع ، لا يمكن تشفير هذه الأرقام اللاحقة المصطنعة باستخدام جدول الترميز أدناه. يجب أن يتم تمثيلهم بالحرف 65. حرف الحشو Base64 هو علامة المساواة (=) ويوضع في نهاية البيانات المشفرة.