هذا المقال يتطلب مستوى: مبتدئ
Base64: ليه تحويل بيانات ثنائية لنص بيكبّر الحجم 33%
لو رفعت صورة حجمها 3 ميجا في إيميل ووصلت للطرف التاني 4 ميجا، ده مش عطل ولا ضغط فاشل. ده ترميز اسمه Base64، وبعد المقال ده هتعرف ليه بيحصل بالظبط، وإمتى تستخدمه وإمتى تبعد عنه.
المشكلة باختصار
فيه قنوات نقل قديمة مبنية على إنها تشيل نص بس: حروف وأرقام وعلامات بسيطة. أشهر مثال هو بروتوكول الإيميل (SMTP) اللي اتصمم أصلاً للنصوص الإنجليزية (7-bit). الصورة أو ملف الـ PDF مش نص، دول بايتات ممكن تاخد أي قيمة من 0 لـ 255. لو بعتهم زي ما هم، القناة ممكن تفسّر بايت منهم على إنه أمر تحكّم وتبوّظ الملف. Base64 بيحل ده: بياخد أي بايتات ويترجمها لنص آمن بحروف وأرقام بس.
الفكرة بمثال للمبتدئ
تخيّل إنك عايز تبعت صورة لصاحبك، بس القناة الوحيدة المتاحة بطاقة بريدية بتسمح تكتب فيها حروف إنجليزية وأرقام بس، ممنوع ترسم. هتعمل إيه؟ هتقسّم الصورة لمربعات صغيرة، وكل مربع توصفه بكود من حروف وأرقام متفق عليه مع صاحبك. هو في الآخر هيقرا الحروف ويعيد تركيب الصورة. انت كده حوّلت رسمة لـ نص تقدر القناة تشيله. ده بالظبط اللي Base64 بيعمله: بيحوّل بايتات لا تقدر القناة تشيلها، إلى حروف تقدر تشيلها. الثمن إن الوصف بالحروف بياخد مساحة أكبر شوية من الرسمة الأصلية.
الشرح العلمي: 3 بايت بيبقوا 4 محارف
دلوقتي نفهم الرقم 33% منين جه بالظبط. كل بايت = 8 بِت. Base64 بيشتغل على البِت مش على البايت. بياخد كل 3 بايت = 24 بِت، ويعيد تقسيمهم لـ 4 مجموعات، كل مجموعة 6 بِت. كل مجموعة من الـ 6 بِت قيمتها بين 0 و 63 (لإن 2 أس 6 = 64). وعشان كده اسمه Base64: عنده 64 رمز جاهز (A حتى Z، ثم a حتى z، ثم 0 حتى 9، ثم + و /). كل قيمة بتتحول للرمز اللي يقابلها.
خد المثال الكلاسيكي: كلمة Man. الحروف دي قيمها بالـ ASCII هي 77 و 97 و 110، يعني بالبِت:
M = 01001101 a = 01100001 n = 01101110
نجمعهم: 0100 1101 0110 0001 0110 1110 (24 بِت)
نعيد التقسيم لـ 6 بِت: 010011 010110 000101 101110
القيم: 19 22 5 46
الرموز: T W F u
فكلمة Man (3 بايت) بقت TWFu (4 محارف). دخلنا 3، طلعنا 4. النسبة 4 على 3 = 1.33، يعني زيادة 33% بالظبط. دي مش مصادفة ولا عيب في الأداة، دي طبيعة التحويل نفسه.
جرّبها بنفسك بكود شغّال
الكود ده بـ Python، من غير أي مكتبات خارجية، بيوريك التحويل ويقيس الزيادة بالأرقام: