YamlBox

الويب والتشفير · 50دقيقة قراءة

Base64 فك التشفير والتشفير: للنقل وليس الأمان

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

تم التحديث

الأبجدية والحشو

الأبجدية القياسية هي `A–Z` و`a–z` و`0–9` و`+` و`/`، مع تعبئة `=` للمجموعة الأخيرة عندما لا يكون طول الإدخال من مضاعفات الثلاثة. هذه الحشوة ليست زخرفية: فهي تخبر وحدة فك التشفير بعدد البايتات التي تحملها المجموعة الأخيرة. يعد تجريدها أمرًا شائعًا في عناوين URL ويعمل لأن أجهزة فك التشفير تستنتج الطول، لكن التطبيقات الصارمة سترفض النموذج غير المبطن.

                "YamlBox"  →  WWFtbEJveA==
"YamlBo"   →  WWFtbEJv
              

base64url: المتغير الذي ينتهي بالرموز المميزة

تتعامل عناوين URL مع `+` و`/` و`=` على أنها مهمة، لذا يستبدلها متغير base64url بـ `-` و`_` وغالبًا ما يحذف الحشو تمامًا. يستخدم كل رمز ويب JSON هذه الأبجدية، وهذا هو السبب في أن حمولة JWT الملصقة في وحدة فك ترميز Base64 الصارمة يمكن أن تفشل في الأحرف التي تبدو عادية تمامًا. إذا تم فك تشفير سلسلة إلى شيء قريب ولكن غير قابل للقراءة تمامًا، فعادةً ما تكون على بعد مبادلة أبجدية واحدة من الإجابة.

حيث تقابله في الممارسة العملية

  • معرفات URI للبيانات - تضمين الصور والخطوط الصغيرة مباشرة في CSS أو HTML كـ `data:image/png;base64,…`.
  • رموز الويب - كل جزء من الأجزاء الثلاثة مشفر بـ base64url.
  • مصادقة HTTP الأساسية - يحمل `Authorization: Basic` قاعدة 64 من `user:password`، ولهذا السبب يجب أن ينتقل دائمًا عبر TLS.
  • مرفقات البريد الإلكتروني — استخدم MIME base64 للأجزاء الثنائية منذ الثمانينات.
  • واجهات برمجة التطبيقات التي لا يمكنها قبول حمولات الصور الثنائية والمفاتيح الموضوعة في حقول نصية فقط.

لماذا يبدو إخراج فك تشفير Base64 كالقمامة

الفشل الكلاسيكي هو Unicode. تعمل `btoa` و`atob` الأقدم في JavaScript على بايت واحد لكل حرف، وبالتالي فإن السلسلة التي تحتوي على `é` أو `₹` أو أي رمز تعبيري إما أنها ترمي أو تنتج mojibake. الحل هو تشفير بايتات UTF-8 أولاً — `TextEncoder` في المتصفح، و`Buffer.from(str, "utf8")` في Node - ثم base64. إذا أعاد فك التشفير أحرفًا ذات مظهر معقول ولكنها خاطئة، فإن السبب الأكثر ترجيحًا هو أن برنامج التشفير لم يحول النص أبدًا إلى UTF-8 بايت على الإطلاق.

لا يوفر Base64 أي سرية أو نزاهة. تعامل مع السر المشفر تمامًا كما تتعامل مع السر الخام، لأن هذا هو ما هو عليه.

لماذا فك التشفير محليا

يتم فك تشفير رؤوس المصادقة الأساسية والرموز المميزة ومعرِّفات URI للبيانات إلى بيانات الاعتماد أو البيانات الخاصة، لذا فإن لصقها في وحدة فك الترميز من جانب الخادم يعد بمثابة كشف. يعمل برنامج التشفير/فك التشفير YamlBox Base64 في الصفحة مع معالجة UTF-8 بشكل صحيح، ويدعم كلاً من الحروف الهجائية القياسية والأبجدية الآمنة لعنوان URL، ويعمل دون اتصال بالإنترنت.

التشفير/فك التشفير Base64 — الأسئلة المتداولة

هل تشفير Base64؟

لا، إنه تشفير قابل للعكس بدون مفتاح، بحيث يمكن لأي شخص فك تشفيره. إنه موجود بحيث يمكن للبيانات الثنائية أن تنتقل عبر قنوات نصية فقط - وليس لحماية البيانات أبدًا. استخدم TLS والتشفير الحقيقي مثل AES-GCM لضمان السرية.

ما هو حجم إخراج Base64؟

أكبر بمقدار الثلث بالضبط، بالإضافة إلى مساحة صغيرة من المساحة المتروكة، لأن ثلاث بايتات تصبح أربعة أحرف. هذه النفقات العامة هي سبب استخدام base64 للأصول الصغيرة المضمنة وتجنبها للأصول الكبيرة.

لماذا يقوم فك ترميز Base64 بإرجاع أحرف غريبة؟

عادةً ما يكون هناك عدم تطابق في التشفير: لم يتم تحويل النص الأصلي إلى بايتات UTF-8 قبل التشفير، أو أنك تقوم بفك تشفير بيانات base64url باستخدام وحدة فك ترميز قياسية. تحقق من وجود الأحرف `-` و`_`، وتأكد من أن برنامج تشفير المصدر يستخدم UTF-8.

الأدوات المذكورة في هذه التدوينة

تصفح القائمة الكاملة للأدوات 19

المزيد من المقالات للقراءة

جميع المشاركات 19 →