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

حوّل النصوص أو البايتات الست عشرية أو الملفات إلى Base45 وبالعكس. يستخدم Base45 الأحرف الخمسة والأربعين للوضع الأبجدي الرقمي في رموز QR، فتتسع البيانات الثنائية في رموز QR بزيادة طفيفة في الحجم.

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

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

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

ما هو Base45؟

يُعرَّف Base45 في RFC 9285. وتتكون أبجديته من الأرقام 0-9 والحروف الكبيرة A-Z وتسعة رموز: المسافة و$ % * + - . / :. وهذه بالضبط الأحرف الخمسة والأربعون التي يستطيع رمز QR تخزينها في وضعه الأبجدي الرقمي المضغوط. لاحظ أن المسافة حرف حقيقي من أحرف الأبجدية، وليست فاصلًا.

يأخذ المرمِّز المدخلات بايتين في كل مرة، ويقرؤهما عددًا بين 0 و65535، ثم يكتب هذا العدد في ثلاثة أرقام Base45، بدءًا بالرقم الأقل أهمية. ويتحول البايت الأخير المنفرد إلى حرفين. وبوصفها نصًا، تبلغ النتيجة 1.5 ضعف حجم المدخلات، أي أكبر من Base64.

لماذا يناسب Base45 رموز QR

في الوضع الأبجدي الرقمي، يضغط رمز QR كل حرفين في 11 بتًا. ولا يستطيع Base64 استخدام هذا الوضع لأنه يحتاج إلى أحرف صغيرة، فيلجأ إلى وضع البايتات بمعدل 8 بتات لكل حرف، أي نحو 10.7 بت لكل بايت من البيانات. أما Base45 فلا يحتاج إلا إلى 8.25 بت لكل بايت في الوضع الأبجدي الرقمي، فتتسع البيانات نفسها في رمز QR أصغر يسهل مسحه.

عند فك الترميز، احتفظ بالمسافات كما هي تمامًا؛ ففواصل الأسطر وحدها هي التي تُتجاهل. والحروف الصغيرة ليست جزءًا من الأبجدية، ويُبلَّغ عنها بوصفها غير صالحة.

فك ترميز شهادات COVID الرقمية في الاتحاد الأوروبي

تحتوي رموز QR في شهادات COVID الرقمية الصادرة في الاتحاد الأوروبي على نص يبدأ بـ HC1:. والباقي بترميز Base45: إذ تُرمَّز بيانات الشهادة بصيغة CBOR، وتُوقَّع باستخدام COSE، وتُضغط باستخدام zlib، ثم تُرمَّز بـ Base45. ولرؤية ما بداخلها:

  1. احذف البادئة HC1:. فأحرفها الأربعة صالحة في Base45، وتركها يُنتج بايتات خاطئة.
  2. فك ترميز الباقي هنا مع اختيار المخرجات «ست عشري». وعادةً ما تبدأ بيانات zlib بالبايت 78.
  3. فك ضغط البايتات باستخدام zlib وحلّل بيانات CBOR بأداة أخرى.

تتولى هذه الأداة خطوة Base45 فقط، فهي لا تفك ضغط البيانات ولا تحللها ولا تتحقق من التوقيع.

Base45 برمجيًا

# Python (pip install base45)
import base45
base45.b45encode(b'AB')     # مثال من RFC 9285: BB8
base45.b45decode('BB8')     # b'AB'

المواصفات

الأبجدية0-9 A-Z مسافة $ % * + - . / :
حجم المخرجات3 أحرف لكل بايتين (150%)
الحشولا يوجد
المعيارRFC 9285
حساس لحالة الأحرفنعم

أمثلة

المدخلات (UTF-8)المخرجات
Hello, World!%69 VDK2E:3404ESVDX0
Base64.isSH8LQEG%61*5P2
你好C-SEFK*.K

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

لماذا تحتوي مخرجات Base45 على مسافات؟

المسافة أحد أحرف الأبجدية الخمسة والأربعين، لذا فهي تحمل بيانات. لا تحذف المسافات من نص Base45 ولا تدمجها، وإلا فشل فك الترميز أو أعطى بايتات خاطئة.

كيف أفك ترميز سلسلة HC1:؟

احذف البادئة HC1:، وفك ترميز الباقي مع اختيار المخرجات «ست عشري»، ثم فك ضغط النتيجة باستخدام zlib واقرأ بيانات CBOR بأداة منفصلة. تنفّذ هذه الأداة خطوة Base45 فقط.

هل Base45 حساس لحالة الأحرف؟

نعم. لا تنتمي إلى الأبجدية إلا الحروف الكبيرة، لأن الوضع الأبجدي الرقمي في رموز QR لا يتضمن أحرفًا صغيرة. ويُبلَّغ عن المدخلات بالأحرف الصغيرة بوصفها غير صالحة، مع ذكر موضعها.

هل Base45 أكثر إيجازًا من Base64؟

بوصفه نصًا عاديًا، لا: يبلغ Base45 نحو 1.5 ضعف حجم المدخلات، وBase64 نحو 1.33 ضعف. أما داخل رمز QR، فنعم، لأن Base45 يستطيع استخدام الوضع الأبجدي الرقمي الأكثر كثافة.