أداة ترميز Base64URL وفك ترميزه

حوّل النصوص أو البايتات الست عشرية أو الملفات إلى Base64 الآمن لعناوين URL وبالعكس. تستخدم الأبجدية - و_ بدل + و/، والحشو معطّل افتراضيًا، كما في JSON Web Tokens وOAuth PKCE.

تعمل بالكامل داخل متصفحك، ولا يُرفع أي شيء.

طريقة الاستخدام

  1. اختر «ترميز» أو «فك الترميز». يكون النوع الآمن لعناوين URL محدّدًا مسبقًا مع إيقاف الحشو.
  2. اكتب النص أو الصقه، أو أدخل بايتات ست عشرية، أو افتح ملفًا. تتحدّث النتيجة فور الكتابة.
  3. لا تفعّل «الحشو» إلا إذا كان النظام المستقبِل يشترط وجود علامات = في النهاية.
  4. انسخ النتيجة أو نزّلها.

ما هو Base64URL؟

يُعرَّف Base64URL في القسم 5 من RFC 4648 بأنه «Base 64 Encoding with URL and Filename Safe Alphabet»، أي ترميز Base64 بأبجدية آمنة لعناوين URL وأسماء الملفات. وهو يعمل تمامًا مثل Base64 القياسي، بمعدل 6 بت لكل حرف، لكنه يغيّر الحرفين اللذين يسبّبان مشكلات في عناوين URL ومسارات الملفات:

Base64 القياسيBase64URL
القيمة 62+-
القيمة 63/_
الحشو=، إلزامييُحذف عادةً

في عنوان URL، قد يُقرأ + على أنه مسافة، ويفصل / بين أجزاء المسار، ويفصل = بين المفاتيح والقيم في سلسلة الاستعلام، لذا يجب ترميز Base64 القياسي بالنسبة المئوية قبل وضعه في رابط. أما Base64URL فلا يحتاج إلى أي تهريب. ويسمح RFC 4648 بحذف الحشو عندما يكون الطول معروفًا من السياق، وهذا بالضبط ما تفعله معظم المواصفات المبنية على Base64URL.

أين يُستخدم Base64URL

  • JSON Web Tokens. تُرمَّز الترويسة والحمولة والتوقيع في JWT كلٌّ منها بـ Base64URL بدون حشو (RFC 7515). ويمكنك قراءة أي رمز منها باستخدام أداة فك ترميز JWT.
  • OAuth 2.0 PKCE. قيمة code_challenge هي صيغة Base64URL غير المحشوة لتجزئة SHA-256 لقيمة code verifier (RFC 7636)، لذا يبلغ طولها دائمًا 43 حرفًا.
  • JSON Web Keys وWebAuthn. تُتبادل معاملات المفاتيح مثل n وe وx وy، وكذلك تحديات WebAuthn ومعرّفات بيانات الاعتماد، بصيغة Base64URL.
  • الرموز المميزة والمعرّفات وأسماء الملفات. تحمل روابط إعادة تعيين كلمة المرور وعناوين URL الموقّعة ومفاتيح التخزين المؤقت قيم Base64URL دون تهريب؛ فالمعرّف العشوائي المكوّن من 16 بايت يصبح 22 حرفًا. وفي أنظمة الملفات غير الحساسة لحالة الأحرف، فضّل Base32، لأن Base64URL يعتمد على حالة الأحرف.

التحويل بين Base64 وBase64URL

يرمّز النوعان البايتات نفسها، لذا فالتحويل بينهما مجرد تبديل للأحرف: ضع - مكان + و_ مكان /، ثم احذف علامات = من النهاية. وللعودة، بدّل الأحرف مرة أخرى وأضف = حتى يصبح الطول من مضاعفات 4. وتقبل أداة فك الترميز في هذه الصفحة كلتا الأبجديتين، مع الحشو أو بدونه.

// Node.js 16+
Buffer.from(data).toString('base64url')
Buffer.from(str, 'base64url')

# Python (تُبقي urlsafe_b64encode على الحشو)
base64.urlsafe_b64encode(data).rstrip(b'=')

// Go
base64.RawURLEncoding.EncodeToString(data)

// Java
Base64.getUrlEncoder().withoutPadding().encodeToString(bytes)

المواصفات

الأبجديةA-Z a-z 0-9 - _
حجم المخرجات4 أحرف لكل 3 بايتات (نحو 133%)
الحشواختياري، ويُحذف عادةً
المعيارRFC 4648، القسم 5
حساس لحالة الأحرفنعم

أمثلة

المدخلات (UTF-8)المخرجات
Hello, World!SGVsbG8sIFdvcmxkIQ
Base64.isQmFzZTY0Lmlz
你好5L2g5aW9

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

هل Base64URL هو نفسه تطبيق ترميز URL على سلسلة Base64؟
لا. يحوّل ترميز النسبة المئوية لسلسلة Base64 القياسية الأحرف + و/ و= إلى %2B و%2F و%3D، ما يجعل السلسلة أطول. أما Base64URL فيستخدم أبجدية مختلفة، فلا حاجة إلى أي تهريب على الإطلاق. ولا يمكن استخدام إحدى الصيغتين مكان الأخرى دون تحويل.
هل يجب أن يتضمن Base64URL حشوًا؟
يعتمد ذلك على الجهة المستهلكة. تشترط JWT وJSON Web Keys وPKCE حذف الحشو، بينما تضيفه الدالة urlsafe_b64encode في Python ومُرمِّز URL الافتراضي في Java. وإذا لم تكن متأكدًا، فاحذفه؛ فأداة فك الترميز هذه تقبل كلتا الصيغتين.
لماذا ترفض أداة فك ترميز Base64 القياسية سلسلة Base64URL الخاصة بي؟
لا تقبل أدوات فك الترميز القياسية الصارمة الحرفين - و_، وبعضها يشترط الحشو. بدّل الأحرف وأضف علامات = ليصبح الطول من مضاعفات 4، أو فك ترميز السلسلة هنا.
كيف أتحقق من قيمة code challenge في PKCE؟
قيمة التحدي هي BASE64URL(SHA256(code_verifier)) بدون حشو. فك ترميزها هنا بعد اختيار «ست عشري» في «صيغة المخرجات»: القيمة الصحيحة تعطي 32 بايت بالضبط، ويمكنك مقارنتها بتجزئة SHA-256 لقيمة verifier.