ترميز وفك ترميز Base64

رمّز النص إلى Base64 أو فك ترميز Base64 إلى نص — آمن لـ UTF-8، بالكامل داخل متصفحك.

1,269 مشاهدة

كيف تعمل الأداة

يحوّل Base64 البيانات الثنائية إلى نص عادي باستخدام أبجدية من 64 حرفًا قابلاً للطباعة: A–Z وa–z و0–9، إضافة إلى + و/ (64 رمزًا يساوي بالضبط 2⁶، وهذا سبب تسميته Base64). تقرأ أداة الترميز الإدخال 3 بايتات (24 بت) في كل مرة، وتقسّم هذه الـ24 بت إلى أربع كتل من 6 بت لكل منها، وتُعيّن كل كتلة من 6 بت إلى حرف واحد من الأبجدية — بحيث تصبح 3 بايتات من البيانات الثنائية دائمًا 4 أحرف نصية بالضبط. إن لم يكن طول الإدخال مضاعفًا نظيفًا للعدد 3، تُكمَل المجموعة الأخيرة بحرف أو حرفين من = للحفاظ على طول الناتج مضاعفًا للعدد 4.

بشكل ملموس: البايتات الثلاثة التي تشكّل كلمة "Man" (77، 97، 110 — أي 01001101 01100001 01101110 بالنظام الثنائي) تُعاد تجميعها إلى أربع كتل من 6 بت (010011، 010110، 000101، 101110)، وتُعيَّن كل واحدة منها إلى حرف، فينتج TWFu. ولأن كل 3 بايتات مدخلة تتوسع دائمًا إلى 4 أحرف مُخرَجة، فإن البيانات المرمَّزة بـBase64 تكون أكبر من الأصل بنسبة 33% تقريبًا وبشكل موثوق — فصورة بحجم 300 كيلوبايت تتحول إلى سلسلة Base64 بحجم نحو 400 كيلوبايت، وهذا أمر مهم عند تضمين الصور كعناوين data: أو إرفاق ملفات ثنائية داخل JSON أو البريد الإلكتروني.

تتعامل هذه الأداة مع يونيكود بشكل صحيح عبر ترميز النص أولًا بـUTF-8، بحيث تذهب الأحرف متعددة البايتات والرموز التعبيرية ("çğü 😀") وتعود سليمة — بينما يطرح استدعاء btoa() البسيط في جافاسكريبت خطأً في هذه الحالات لأنه يتوقع بايتًا واحدًا لكل حرف. كل شيء يعمل محليًا في متصفحك؛ لا يُرسَل أي شيء تكتبه إلى أي مكان.

يظهر Base64 باستمرار في أماكن لا يلاحظها معظم الناس أبدًا: وسم HTML مثل <img src="data:image/png;base64,..."> يضمّن صورة كاملة مباشرة بدلًا من الربط بملف؛ وترويسة HTTP بعنوان Authorization: Basic تحمل سلسلة "اسم المستخدم:كلمة المرور" مرمَّزة بـBase64 (وهذا مجرد تنسيق، لا حماية — فـTLS هو ما يحافظ فعليًا على الخصوصية أثناء النقل)؛ وتُرمَّز مرفقات البريد الإلكتروني بـBase64 منذ معيار MIME الأصلي، لأن SMTP صُمم لنقل نص من 7 بت، لا بيانات ثنائية خام؛ وتستخدم رموز JSON Web Tokens (JWT) الصيغة الآمنة لعناوين URL لحزم بنية ثنائية موقَّعة في ثلاثة أجزاء نصية مفصولة بنقاط.

ما ينبغي معرفته

  • Base64 ليس تشفيرًا — إنه تمثيل قابل للعكس ومعروف للعامة بلا أي سرّية على الإطلاق. يمكن لأي شخص فك ترميزه فورًا بالأبجدية نفسها؛ ووجوده فقط لجعل البيانات الثنائية آمنة للمرور عبر قنوات نصية بحتة (مرفقات MIME في البريد، عناوين data، حقول JSON، ترويسات HTTP Basic-Auth)، وليس أبدًا لإخفاء المحتوى.
  • الصيغة الآمنة لعناوين URL: بما أن + و/ لهما معنى خاص في عناوين URL، فإن أبجدية Base64 "الآمنة لعناوين URL" تستبدلهما بـ- و_ وغالبًا ما تحذف حشو =. تفك هذه الأداة كلتا الصيغتين تلقائيًا.
  • تكلفة الحجم ثابتة ويمكن التنبؤ بها: الزيادة بنسبة 33% تقريبًا (نسبة 4/3) دقيقة بالنسبة للحمولة نفسها — وهذا هو سبب كون واجهات برمجة التطبيقات التي تقبل رفع بيانات ثنائية خام أكثر كفاءة عادةً من حيث النطاق الترددي مقارنةً بتلك التي تتطلب أجسام JSON ملفوفة بـBase64.
  • الحشو يخبرك بالباقي: علامة = واحدة تعني أن طول البيانات الأصلية كان أكبر بمقدار 2 بايت عن مضاعف للعدد 3؛ وعلامتان تعنيان بايتًا واحدًا زيادة. وعدم وجود أي حشو يعني أن الإدخال كان مضاعفًا تامًا للعدد 3 بايت.

الأسئلة الشائعة

لماذا يبدو ناتجي بعد فك الترميز مشوّشًا؟

عادةً لأن الإدخال لم يكن Base64 صالحًا (مقطوعًا، أو بأحرف آمنة لعناوين URL -_ بدلًا من +/)، أو لأن البايتات الأصلية لم تكن نصًا أصلًا. تفك هذه الأداة صيغ URL الآمنة تلقائيًا.

هل يمكنني ترميز الملفات؟

هذه الأداة مخصصة للنصوص. أما بالنسبة للملفات، فالنمط المتّبع هو عنوان data:، الذي يلفّ سلسلة Base64 ببادئة نوع MIME كي يعرف المتصفح أو عميل البريد كيفية عرضها — وتوفّر معظم اللغات حلًا في سطر واحد لإنشائه (PHP: base64_encode(file_get_contents(...))، JS: FileReader.readAsDataURL). أما الملفات الكبيرة جدًا فمن الأفضل عادةً إرسالها كبيانات ثنائية خام بدلًا من لفّها بـBase64، نظرًا للزيادة في الحجم بنسبة 33% تقريبًا.

هل Base64 آمن لكلمات المرور؟

لا — فهو قابل للعكس بسهولة تامة بحكم تصميمه، دون أي مفتاح أو سرّ متضمَّن. تستخدمه مصادقة HTTP الأساسية فقط لتنسيق النقل (حزم "المستخدم:كلمة المرور" في سلسلة آمنة للترويسة) وتعتمد كليًا على TLS/HTTPS لتحقيق السرّية الفعلية أثناء النقل. خزّن كلمات المرور بعد تجزئتها بخوارزمية بطيئة ومملّحة (bcrypt، argon2، scrypt) — لا تُشفَّر أبدًا، ولا تُستخدَم Base64 أبدًا لهذا الغرض، لأن أي شخص يمكنه عكسها في سطر واحد من الكود.

لماذا يكون الناتج المرمَّز بـBase64 أكبر دائمًا من الإدخال بنحو 33%؟

لأن الترميز يُعيّن كل 3 بايتات (24 بت) من الإدخال إلى 4 أحرف من الناتج، ويحمل كل حرف من الناتج 6 بت فقط من المعلومات بدلًا من 8 بت التي يحملها البايت — وهذه نسبة توسع ثابتة قدرها 4/3، ولا تتغير حسب المحتوى. يتحول ملف بحجم 3 ميغابايت دائمًا إلى سلسلة Base64 بحجم نحو 4 ميغابايت.

ما الفرق بين Base64 القياسي والصيغة "الآمنة لعناوين URL"؟

يستخدم Base64 القياسي الحرفين + و/ في أبجديته، وكلاهما له معنى محجوز داخل عناوين URL ومسارات الملفات، لذا تستبدلهما الصيغة الآمنة لعناوين URL بـ- و_ (وغالبًا ما تحذف حشو =) كي تتمكن السلسلة المرمَّزة من الظهور مباشرة في عنوان URL أو اسم ملف دون الحاجة إلى تهريب الأحرف. تتعرف هذه الأداة على كلتا الصيغتين وتفكّهما تلقائيًا.

التعليقات

لا توجد تعليقات بعد — كن أول من يكتب تعليقًا!

أدوات مشابهة