طريقة الاستخدام
- اختر «ترميز» لتحويل النص إلى Base32hex، أو «فك الترميز» لإعادة Base32hex إلى نص.
- أبقِ «النوع» على Base32hex. أوقف «الحشو» أو اختر «أحرف صغيرة» إن كانت صيغتك تتطلب ذلك.
- اكتب المدخلات أو الصقها، أو افتح ملفًا. تتحدّث النتيجة فور الكتابة.
- انسخ النتيجة أو نزّلها كملف.
ما هو Base32hex؟
Base32hex هو «Base 32 Encoding with Extended Hex Alphabet»، أي ترميز Base32 بأبجدية الست عشري الموسّعة، المعرّف في القسم 7 من RFC 4648. وهو يعمل تمامًا مثل Base32 القياسي: يحمل كل حرف 5 بتات، وتتحول كل 5 بايتات إلى 8 أحرف، وتُحشى المخرجات بالرمز = حتى يصبح طولها من مضاعفات 8. والفرق الوحيد هو الأبجدية. فبدلًا من A-Z 2-7، يواصل Base32hex العدّ من حيث يتوقف النظام الست عشري: الأرقام من 0 إلى 9 تمثّل القيم من 0 إلى 9، والحرف A يساوي 10، والحرف V يساوي 31.
ولأن الأبجديتين تشتركان في معظم أحرفهما، كثيرًا ما يمكن تمرير سلسلة Base32hex إلى أداة فك ترميز Base32 قياسية دون ظهور أي خطأ، لكن البايتات الناتجة تكون خاطئة. لذا احرص دائمًا على فك الترميز بالنوع نفسه الذي استُخدم في الترميز.
الحفاظ على ترتيب الفرز
أحرف الأبجدية مرتبة تصاعديًا وفق ترتيب ASCII، وتزداد قيمة كل حرف بتقدّم موضعه. ونتيجة لذلك، فإن مقارنة سلسلتين من Base32hex حرفًا حرفًا تعطي الترتيب نفسه الذي تعطيه مقارنة البايتات الأصلية. ويشير RFC 4648 إلى هذه الخاصية بوصفها ما يفتقر إليه Base32 القياسي وBase64، وهي تجعل Base32hex مناسبًا للمفاتيح في أنظمة التخزين المرتبة مثل قواعد البيانات ومخازن المفاتيح والقيم.
اكتب جميع السلاسل بحالة أحرف واحدة، وأوقف الحشو عندما تختلف المدخلات في الطول: فالرمز = يقع في الترتيب بين الأرقام والحروف وقد يُفسد الترتيب.
Base32hex في سجلات DNSSEC NSEC3
تُثبت سجلات NSEC3، المعرّفة في RFC 5155، أن اسم DNS ما غير موجود، مع جعل سرد جميع الأسماء في المنطقة (zone) أصعب. يُجزَّأ كل اسم باستخدام SHA-1، ثم تُكتب التجزئة البالغ طولها 20 بايتًا في صورة تسمية Base32hex من 32 حرفًا بلا حشو، وتُعرض عادةً بالأحرف الصغيرة. ولأن الترميز يحافظ على ترتيب التجزئات، تشكّل الأسماء المجزّأة سلسلة مرتبة. ولتحويل تجزئة إلى تسمية كهذه، الصقها بوصفها مدخلات ست عشرية، وأوقف الحشو، واختر «أحرف صغيرة». تنفّذ هذه الأداة خطوة الترميز فقط، ولا تحسب تجزئة NSEC3 المملّحة والمكرّرة.
Base32hex برمجيًا
# Python 3.10+
import base64
base64.b32hexencode(b'foobar') # b'CPNMUOJ1E8======'
base64.b32hexdecode('CPNMUOJ1E8======') # b'foobar'
// Go (import "encoding/base32")
base32.HexEncoding.EncodeToString(data)
base32.HexEncoding.WithPadding(base32.NoPadding).EncodeToString(data)
المواصفات
| الأبجدية | 0-9 A-V |
|---|---|
| حجم المخرجات | 8 أحرف لكل 5 بايتات (160%) |
| الحشو | بالرمز = حتى يصبح الطول من مضاعفات 8 |
| المعيار | RFC 4648، القسم 7 |
| حساس لحالة الأحرف | لا |
أمثلة
| المدخلات (UTF-8) | المخرجات |
|---|---|
Hello, World! | 91IMOR3F5GG5ERRIDHI22=== |
Base64.is | 89GN6P9M6GN6ISO= |
你好 | SIUQ1PD5NK====== |
الأسئلة الشائعة
ما الفرق بين Base32 وBase32hex؟
A-Z 2-7، بينما يستخدم Base32hex الأبجدية 0-9 A-V التي تحافظ على ترتيب فرز البيانات. ولا يمكن استخدام أحدهما مكان الآخر.هل Base32hex حساس لحالة الأحرف؟
الأبجدية معرّفة بالأحرف الكبيرة، لكن أداة فك الترميز هذه تقبل المدخلات بالأحرف الصغيرة أيضًا. فعّل «أحرف صغيرة» إن احتجت إلى مخرجات بالأحرف الصغيرة، لتسميات DNS مثلًا.
هل يجب أن أستخدم الحشو؟
= حتى يصبح الطول من مضاعفات 8 أحرف، لكن صيغًا كثيرة، منها NSEC3، تحذفه. وأداة فك الترميز تقبل الحالتين، فاختر ما يتوقعه النظام المستقبِل.