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

حوّل النصوص أو البايتات الست عشرية أو الملفات إلى Base32 بأبجدية الست عشري الموسّعة وبالعكس. تحكّم في الحشو وحالة الأحرف، لإنتاج تسميات بأسلوب NSEC3 مثلًا.

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

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

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

ما هو 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.is89GN6P9M6GN6ISO=
你好SIUQ1PD5NK======

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

ما الفرق بين Base32 وBase32hex؟
يستخدم كلاهما 5 بتات لكل حرف وقواعد الحشو نفسها. يستخدم Base32 القياسي الأبجدية A-Z 2-7، بينما يستخدم Base32hex الأبجدية 0-9 A-V التي تحافظ على ترتيب فرز البيانات. ولا يمكن استخدام أحدهما مكان الآخر.
هل Base32hex حساس لحالة الأحرف؟

الأبجدية معرّفة بالأحرف الكبيرة، لكن أداة فك الترميز هذه تقبل المدخلات بالأحرف الصغيرة أيضًا. فعّل «أحرف صغيرة» إن احتجت إلى مخرجات بالأحرف الصغيرة، لتسميات DNS مثلًا.

هل يجب أن أستخدم الحشو؟
يحشو RFC 4648 بالرمز = حتى يصبح الطول من مضاعفات 8 أحرف، لكن صيغًا كثيرة، منها NSEC3، تحذفه. وأداة فك الترميز تقبل الحالتين، فاختر ما يتوقعه النظام المستقبِل.
هل سلسلة Base32hex هي نفسها النظام الست عشري؟
لا. فسلسلة Base32hex التي لا تحتوي صدفةً إلا على 0-9 وA-F تبدو كأنها ست عشرية، لكن كل حرف فيها يحمل 5 بتات بدلًا من 4. وللتعامل مع الست عشري العادي، استخدم أداة Base16.