طريقة الاستخدام
- اختر «ترميز» أو «فك الترميز». يكون النوع الآمن لعناوين URL محدّدًا مسبقًا مع إيقاف الحشو.
- اكتب النص أو الصقه، أو أدخل بايتات ست عشرية، أو افتح ملفًا. تتحدّث النتيجة فور الكتابة.
- لا تفعّل «الحشو» إلا إذا كان النظام المستقبِل يشترط وجود علامات = في النهاية.
- انسخ النتيجة أو نزّلها.
ما هو 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.is | QmFzZTY0Lmlz |
你好 | 5L2g5aW9 |
الأسئلة الشائعة
هل Base64URL هو نفسه تطبيق ترميز URL على سلسلة Base64؟
+ و/ و= إلى %2B و%2F و%3D، ما يجعل السلسلة أطول. أما Base64URL فيستخدم أبجدية مختلفة، فلا حاجة إلى أي تهريب على الإطلاق. ولا يمكن استخدام إحدى الصيغتين مكان الأخرى دون تحويل.هل يجب أن يتضمن Base64URL حشوًا؟
urlsafe_b64encode في Python ومُرمِّز URL الافتراضي في Java. وإذا لم تكن متأكدًا، فاحذفه؛ فأداة فك الترميز هذه تقبل كلتا الصيغتين.لماذا ترفض أداة فك ترميز Base64 القياسية سلسلة Base64URL الخاصة بي؟
- و_، وبعضها يشترط الحشو. بدّل الأحرف وأضف علامات = ليصبح الطول من مضاعفات 4، أو فك ترميز السلسلة هنا.كيف أتحقق من قيمة code challenge في PKCE؟
BASE64URL(SHA256(code_verifier)) بدون حشو. فك ترميزها هنا بعد اختيار «ست عشري» في «صيغة المخرجات»: القيمة الصحيحة تعطي 32 بايت بالضبط، ويمكنك مقارنتها بتجزئة SHA-256 لقيمة verifier.