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

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

يعمل 100% في متصفحك. لا يتم رفع أي شيء تلصقه أو تخزينه.
نص أو Base64
النتيجة
جاهز.

كيف تستخدم أداة ترميز وفك ترميز Base64

  1. اختر ترميز لتحويل النص إلى Base64، أو فك الترميز لإعادة Base64 إلى نص.
  2. الصق المُدخل. يُعامَل النص على أنه UTF-8، لذا تعمل الحروف ذات العلامات والكتابات غير اللاتينية والرموز التعبيرية بشكل صحيح.
  3. فعّل خيار آمن لعناوين URL إذا كانت النتيجة ستوضع في عنوان URL أو اسم ملف أو JWT.
  4. انسخ الناتج.

يجري الترميز وفك الترميز محليًا في متصفحك؛ ولا يُرفع أي شيء تلصقه ولا يُخزَّن.

كيف يعمل Base64

يمثّل Base64، المعرَّف في RFC 4648، أي بيانات ثنائية باستخدام 64 حرفًا قابلًا للطباعة من ASCII: A–Z وa–z و0–9 و+ و/. ووُجد كي يتمكن المحتوى الثنائي من الانتقال بأمان عبر أنظمة صُممت للنصوص، مثل البريد الإلكتروني وJSON وXML وترويسات HTTP.

تأخذ الخوارزمية المُدخل 3 بايتات (24 بت) في كل مرة وتقسمها إلى أربع مجموعات من 6 بتات. كل قيمة من 6 بتات (0–63) تختار حرفًا واحدًا من الأبجدية. وتوضّح كلمة Man العملية:

الخطوةالقيمة
البايتاتM=77، a=97، n=110
24 بت01001101 01100001 01101110
مجموعات من 6 بتات010011 010110 000101 101110 = 19، 22، 5، 46
Base64TWFu

لأن كل 3 بايتات تصبح 4 أحرف، يكون ناتج Base64 أكبر بنحو 33% من المُدخل (إضافة إلى فواصل الأسطر، إذا كان تنسيق مثل MIME يُدرجها).

الحشو بالرمز =

عندما لا يكون طول المُدخل من مضاعفات الثلاثة، تُحشى المجموعة الأخيرة. البايت الواحد المتبقي ينتج حرفين مع ==؛ والبايتان المتبقيان ينتجان ثلاثة أحرف مع =. فمثلًا، تُرمَّز Hi إلى SGk=.

Base64 الآمن لعناوين URL

للحرفين القياسيين + و/ معنى خاص في عناوين URL ومسارات الملفات. تعرّف RFC 4648 §5 أبجدية base64url، التي تستبدلهما بـ- و_. وكثيرًا ما يُحذف الحشو. وتستخدم رموز JSON Web Tokens صيغة base64url دون حشو.

Standard:  +/8=
URL-safe:  -_8

أخطاء شائعة

Base64 ليس تشفيرًا

يستطيع أي شخص فك ترميز Base64 فورًا؛ فلا يوجد مفتاح. لا تستخدمه أبدًا «لإخفاء» كلمات المرور أو مفاتيح API. للتحقق من السلامة استخدم قيمة تجزئة من مولّد التجزئة (Hash)، وللسرية استخدم تشفيرًا حقيقيًا.

UTF-8 في JavaScript

الدالة المدمجة btoa() في المتصفح لا تقبل إلا الأحرف ضمن نطاق Latin-1، وتُطلق خطأً عند أي شيء آخر. حوّل النص إلى بايتات UTF-8 أولًا:

btoa("✓");   // InvalidCharacterError

const bytes = new TextEncoder().encode("✓");
btoa(String.fromCharCode(...bytes));   // "4pyT"

الخلط بين الأبجديتين

فك ترميز بيانات base64url بأداة فك ترميز قياسية صارمة يفشل عند - و_، أو عند غياب الحشو. حوّل الأبجدية وأعد إضافة الحشو حتى يصبح الطول من مضاعفات أربعة أحرف قبل فك الترميز.

أين ستصادف Base64

  • معرّفات URI للبيانات (Data URIs) تضمّن الملفات الصغيرة مباشرة في HTML أو CSS: data:image/png;base64,iVBORw0KGgo...
  • المصادقة الأساسية في HTTP (Basic) ترسل username:password مرمّزة بـBase64. تصبح user:pass هي Authorization: Basic dXNlcjpwYXNz، ويسهل جدًا عكسها، لذا يجب ألا تُستخدم المصادقة الأساسية إلا عبر HTTPS. ويمكنك فحص هذه الترويسات باستخدام أداة فحص ترويسات HTTP.
  • مرفقات البريد الإلكتروني (MIME) وشهادات PEM ومفاتيحها.
  • رموز JWT، التي تكون ترويستها وحمولتها بصيغة JSON مرمّزة بـbase64url. استخدم أداة فك ترميز JWT لقراءتها.
نصيحة: في سطر الأوامر، يرمّز الأمر printf 'text' | base64 النص، ويفك الأمر base64 -d ترميزه (تستخدم إصدارات macOS الأقدم -D). استخدم printf أو echo -n حتى لا يُرمَّز سطر جديد زائد في النهاية أيضًا.

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

لماذا تنتهي سلسلة Base64 لدي بـ = أو ==؟

هذا هو الحشو. فهو يخبر أداة فك الترميز بعدد البايتات التي احتوتها المجموعة الأخيرة عندما لم يكن طول المُدخل قابلًا للقسمة على ثلاثة.

هل Base64 آمن؟

لا. إنه ترميز وليس تشفيرًا. لا يوفر أي سرية على الإطلاق؛ كل ما يفعله هو جعل البيانات الثنائية آمنة للنقل كنص.

لماذا يكون الناتج المرمَّز أكبر من المُدخل؟

كل حرف في Base64 يحمل 6 بتات بدلًا من 8، لذا تحتاج 3 بايتات من المُدخل إلى 4 أحرف في الناتج، أي زيادة تقارب الثلث.

ما الفرق بين Base64 وbase64url؟

يختلف حرفان فقط: تستخدم base64url الرمزين - و_ بدلًا من + و/، وعادةً ما تحذف حشو =، فيمكن وضع النتيجة في عناوين URL دون حاجة إلى ترميز إضافي.

آخر تحديث

تم النسخ إلى الحافظة