العربية

أدوات المطور · التشفير ووحدة فك التشفير Base64

كيف يقوم Base64 بتحويل ثلاث بايتات إلى أربعة أحرف خطوة بخطوة

· كيف يعمل

base64 ترميز يونيكود

إعادة تجميع البتات من ثلاث بايتات إلى أربعة مؤشرات بت 6
الرسم التوضيحي المتجه الأصلي ToolAcre

Base64 ليس أكثر من إعادة تجميع البتات: 24 bits في الداخل، وأربعة مؤشرات 6 بت خارج. يستعرض هذا المنشور البحث في الجدول، وتبديل البت، والرحلة العكسية بحيث يتوقف التنسيق عن كونه مربعًا أسود.

السلسلة "TWFu" والكلمة التي تخفيها - بدءًا من كتلة حقيقية مكونة من أربعة أحرف والسؤال عن مصدر كل حرف

يتم فك تشفير سلسلة Base64 المكونة من أربعة أحرف TWFu إلى التسلسل ثلاثي البايت Man. إن كيفية تحول ثلاث بايتات إلى أربعة أحرف يكشف أن Base64 ليس تشفيرًا أو ضغطًا ولكنه إعادة تجميع بتات خالصة. بمجرد رؤية تخطيط البت، يتوقف إخراج Base64 عن كونه معتمًا ويصبح قابلاً للتنبؤ به. يمكنك تشفير Man يدويًا، والتحقق منه مقابل TWFu، وفهم سبب قيام Base64 دائمًا بإخراج أربعة أحرف لكل ثلاثة بايت من الإدخال.

سحر Base64 هو أن ثلاث بايتات (24 bits) يتم إعادة تجميعها بشكل مثالي في أربع قطع من ستة بتات. تمثل ستة بتات 0 إلى 63، ولهذا السبب تحتوي الأبجدية على رموز 64 تمامًا: A–Z (26)، a–z (26)، 0–9 (10)، و+ و / (2). يتم فهرسة كل قطعة مكونة من ستة بتات إلى أبجدية لإنتاج حرف إخراج واحد. والعكس نظيف بنفس القدر: يتم فهرسة أربعة أحرف في الحروف الأبجدية لاستعادة أربع قطع مكونة من ستة بتات، والتي يتم إعادة تجميعها في ثلاث بايتات.

من البايتات إلى مؤشرات 6 بت - كيف يتم تقسيم 24 bits إلى أربع مجموعات ولماذا تكون رموز 64 كافية تمامًا

هذا هو السبب في أن Base64 يبدو طبيعيًا في كل مكان. خذ ثلاث بايتات M، a، n في ASCII: 0x4D، 0x61، 0x6E. اكتب بالنظام الثنائي: 01001101، 01100001، 01101110. قم بتسلسل كافة 24 bits: 010011010110000101101110. أعد التجميع في أربع أجزاء من ستة بتات: 010011 010110 000101 101110. تفسير كأرقام ثنائية: 19، 22، 5، 46. الفهرسة في الأبجدية Base64 (A=0, B=1, ...Z=25, a=26, ...z=51, 0=52, ...9=61, +=62, /=63). الفهرس 19 هو T، الفهرس 22 هو W، الفهرس 5 هو F، الفهرس 46 هو u.

الإخراج: توفو. البحث عن الفهرس ميكانيكي. الأبجدية Base64 هي تسلسل حيث يكون الموضع مهمًا: كل تطبيق يستخدم نفس الترتيب A–Z، a–z، 0–9، +، /. ترتيب مختلف ينتج مخرجات مختلفة؛ تغيير الترتيب هو بالضبط كيفية عمل base64url. في الأبجدية القياسية، تشغل الأحرف الكبيرة الفهارس 0–25، والأحرف الصغيرة 26–51، والأرقام 52–61، والأحرف الخاصة 62–63. هذا الترتيب تعسفي ولكن تم إصلاحه بواسطة RFC؛ كل وحدة فك ترميز تتوقع نفس التعيين.

البحث عن جدول الحروف الأبجدية والفهرس — A–Z، a–z، 0–9، + و/ بالترتيب، وسبب أهمية الترتيب للمقارنة

إذا كتبت أبجدية على الورق وقمت بالعد بعناية، فيمكنك التشفير يدويًا بدون جهاز كمبيوتر: ابحث عن 19، عد A B C...T، اكتب T، كرر. إن الرجوع إلى الخلف أمر بسيط بنفس القدر. بالنظر إلى TWFu، ابحث عن كل حرف في الأبجدية: T هو 19، W هو 22، F هو 5، u هو 46. التحويل إلى ثنائي (الأصفار البادئة لستة بتات): 010011، 010110، 000101، ​​101110. تسلسل: 010011010110000101101110.

قم بالتجميع في ثلاث بايتات من ثماني بتات: 01001101، 01100001، 01101110. قم بالتفسير كنظام عشري أو سداسي عشري: 77، 97، 110 أو 0x4D، 0x61، 0x6E. التحويل إلى ASCII: M, a, n. لقد قمت باسترداد البايتات الثلاث الأصلية. هذا هو السبب في أن Base64 قابل للعكس ولماذا تصبح الحشوة ضرورية فقط للمدخلات التي لا تقبل القسمة على ثلاثة. يقوم Base64 بتشفير البايتات الدقيقة وليس أكثر. إن رجل التشفير وبايتات التشفير (77، ​​97، 110) عبارة عن عمليات متطابقة؛ Base64 لا يعرف أو يهتم بالأحرف أو اللغة أو التشفير.

مثال عملي: ترميز "Man" يدويًا - الثنائي M وa وn والمؤشرات الأربعة وأحرف الإخراج الأربعة

يرى بايت. هناك اهتمام منفصل ببرنامج التشفير ووحدة فك التشفير الخاصين بالأداة: حيث يمر الإدخال النصي مثل Man عبر TextEncoder أولاً، ويتحول إلى UTF-8 بايت. هذه البايتات هي إدخال Base64. إخراج TWFu هو نص (ASCII حرفًا)، ولكنه يمثل البايتات، وليس الكلمة. تقوم أداة مختلفة لقراءة TWFu باسترداد البايتات (77، 97، 110) ويجب أن تقرر بشكل مستقل ما إذا كانت تمثل كلمة أو صورة أو رسالة في ترميز آخر أو أي شيء آخر.

المدخلات الكبيرة هي تكرارات عديدة لهذا النمط. يستخدم الملف 300 بايت 300/3 = 100 كتل مكونة من ثلاث بايت، كل منها يصبح أربعة أحرف، مما ينتج عنه 400 أحرف الإخراج. عندما يتم تعبئة الكتلة الأخيرة، يتجاهل جهاز فك التشفير التعبئة الصفرية بدلاً من تصنيع بايت آخر. هذا الحد مرئي مع مدخلات ثنائية البايت: ثلاثة مؤشرات مفيدة باقية، والموضع الرابع عبارة عن علامة يساوي، وستة عشر بتًا فقط أعيد بناؤها تنتمي إلى النتيجة.

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

نظرًا لأن النمط منتظم، فإن العملية سريعة: إزاحة البت، والبحث، والكتابة. المخالفة الوحيدة هي الكتلة النهائية عندما لا يكون طول الإدخال مضاعفًا للثلاثة، ويتم التعامل معه عن طريق الحشو. نظرًا لأن كل كتلة مستقلة - لا تؤثر البتات من كتلة واحدة على الكتلة التالية - يمكن لـ Base64 التشفير بشكل متزايد: إدخال البايتات، وإخراج الأحرف، دون انتظار الإدخال بالكامل.

يختلف Base64url فقط في استبدال الأبجدية. تصبح الفهارس 62 و63 - و _ بدلاً من + و /. إعادة تجميع البتات متطابقة؛ تعيين البايت إلى الحرف متطابق؛ يتغير جدول البحث فقط. وبالتالي يمكن لجهاز فك التشفير اليدوي إعادة استخدام كل إزاحة وقناع من Base64 القياسي، واستبدال هذين الرمزين الطرفيين فقط.

لماذا تكون النتيجة عبارة عن تسلسل من البايتات، وليس نصًا - الخطوة المنفصلة التي تحول البايتات إلى UTF-8 من الأحرف

ولهذا السبب يصفها القسم RFC 4648 5 بأنها أبجدية مميزة، وليس ترميزًا مختلفًا. سلسلة TWFu في Base64 القياسية لا لبس فيها: يمكن أن تعني فقط المؤشرات (19، 22، 5، 46). في base64url، يجب أن تحتوي السلسلة على - أو _ لتختلف، وبدون وجود تلك المؤشرات، تنطبق نفس المؤشرات.

تتضمن الأخطاء في التنفيذ عادةً أخطاء متفرقة في إزاحات البت أو تعيين أبجدي غير صحيح. ينتج برنامج التشفير الذي يستخدم ترتيبًا أبجديًا خاطئًا مخرجات مختلفة إذا تم تبديل a وA. قد يؤدي سوء معالجة وحدة فك التشفير للكتلة الجزئية الأخيرة (عند وجود الحشو) إلى استعادة عدد خاطئ من البايتات. يستخدم برنامج التشفير ووحدة فك التشفير Base64 الأبجدية القياسية ويتعامل مع الحشو بواسطة RFC 4648، حتى تتمكن من لصق أي مثال محسوب يدويًا والتحقق من العمل.

ما لا يغطيه هذا — base64url، MIME، التفاف الأسطر وأداء المخازن المؤقتة الكبيرة

نظرًا لأن الرياضيات البتية حتمية، فإن أي خطأ في التشفير اليدوي سيؤدي إلى إنتاج مخرجات مختلفة عند فك التشفير، مما يجعل الخطأ فوريًا. Base32 (RFC 4648 القسم 6) يوسع المبدأ ليشمل أجزاء من خمس بتات: 32 الرموز (A–Z و 2–7)، لذا فإن خمس بتات تتلاءم تمامًا مع حرف واحد، و40 bits (خمس بايت) إعادة تجميعها في ثمانية أحرف. ينطبق نفس منطق إعادة التجميع؛ الفرق هو حجم الأبجدية وبالتالي نسبة بايت الإدخال إلى أحرف الإخراج.

يستخدم النظام السداسي العشري (base16) ثمانية من مجموعات الرموز المحتملة 256 ويقوم بتعيين بايت واحد إلى حرفين دون إعادة التجميع. إن فهم Base64 كإعادة تجميع البتات يجعل المتغيرات بسيطة من الناحية المفاهيمية: اختر البتات لكل حرف، وقم بتجميع الإدخال وفقًا لذلك، وابحث عن كل مجموعة بالأبجدية. عند تصحيح أخطاء Base64، فإن الصورة البتية هي أداتك. إذا كانت وحدات البايت تالفة، فقم بتشفيرها مرة أخرى ومقارنة حرف الإخراج بحرف. إذا لم تكن متأكدًا من وحدات البايت التي يحتوي عليها TWFu، فقم بفك تشفيرها وفحص الإخراج بالنظام الست عشري.

الوجبات الجاهزة: Base64 عبارة عن إعادة تجميع عكسية للبتات - كيف يتيح لك برنامج التشفير ووحدة فك التشفير Base64 التحقق من أي كتلة محسوبة يدويًا على الفور في المتصفح

يُظهر برنامج التشفير ووحدة فك التشفير Base64 كلاً من الأحرف والعرض السداسي، مما يجعل من السهل التحقق مما إذا كان النظر إلى بايتات النص (سيتم فك التشفير إلى نص مقروء) أو البيانات الثنائية (يظهر على شكل سداسي عشري ومن الأفضل الاحتفاظ به على شكل بايتات، وليس نصًا). تعتبر العملية خطوة بخطوة - من البايت إلى البتات، ومن البتات إلى المؤشرات، ومن المؤشرات إلى الأحرف - عملية حتمية وسريعة، كما هو الحال في كل تطبيق متوافق. RFC 4648 يعرّف Base64 رسميًا حتى يمكن مقارنة التطبيقات.

يحدد المعيار الأبجدية وتخطيط البت وقواعد الحشو وكيفية التعامل مع التفاف الأسطر في MIME. تسهل معرفة المعيار التحقق مما إذا كان برنامج فك التشفير يتبعه بدقة (Base64 الأساسي) أو يقبل المتغيرات (الحشوة المفقودة أو URL-الأحرف الآمنة). تستخدم العديد من التطبيقات الواقعية Base64 بشكل مختلف قليلاً: بعضها يحذف الحشو، وبعضها يستخدم أحرف آمنة URL، وبعضها يلتف بأطوال أسطر مختلفة. يتعامل جهاز التشفير ووحدة فك التشفير Base64 مع الاختلافات تلقائيًا، ولكن فهم المعيار يجعل تصحيح أخطاء التكامل أكثر بساطة.