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

حوّل النصوص أو البايتات الست عشرية أو الملفات إلى Base85 وبالعكس. تستخدم هذه الصفحة مجموعة أحرف RFC 1924، وهي النسخة التي تنتجها الدالة b85encode في Python وتُستخدم في الرقع الثنائية في Git.

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

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

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

ما هو Base85؟

Base85 عائلة من الترميزات تحوّل كل 4 بايتات إلى 5 أحرف. فخمسة أرقام بالأساس 85 تستوعب 85 × 85 × 85 × 85 × 85 = 4,437,053,125 قيمة، وهذا يكفي بالكاد لأي عدد من 32 بت، لذا تزيد المخرجات على المدخلات بنسبة 25% فقط، مقابل 33% في Base64.

توجد عدة أبجديات لـ Base85 ولا يمكن استخدام إحداها مكان الأخرى: Ascii85 (Adobe وPDF) وZ85 (ZeroMQ) والأبجدية المستخدمة في هذه الصفحة. وهي تتكوّن من 0-9 وA-Z وa-z و23 رمزًا: !#$%&()*+-;<=>?@^_`{|}~. وتُستبعد منها علامات الاقتباس والفاصلة والنقطة والشرطة المائلة والنقطتان والشرطة المائلة العكسية والأقواس المربعة.

RFC 1924 وGit وPython

تأتي مجموعة الأحرف من RFC 1924 بعنوان «A Compact Representation of IPv6 Addresses»، الذي نُشر في 1 أبريل 1996 على سبيل دعابة كذبة أبريل. وقد اقترح كتابة عنوان IPv6 المكوّن من 128 بت على هيئة عدد واحد بالأساس 85 من 20 حرفًا بالضبط. لا أحد يكتب عناوين IPv6 بهذه الطريقة، لكن الأبجدية أُعيد استخدامها لاحقًا للبيانات الثنائية عمومًا:

  • Git يخزّن الملفات الثنائية في الرقع (git diff --binary وgit format-patch) على هيئة بيانات مضغوطة بـ zlib ومرمّزة بهذه الأبجدية، مع حرف يدل على الطول في بداية كل سطر.
  • Python يوفّر منذ الإصدار 3.4 الدالتين base64.b85encode() وb85decode()، ومخرجاتهما مطابقة لمخرجات هذه الأداة.
  • Mercurial يستخدم الترميز نفسه للملفات الثنائية في الفروقات بأسلوب Git.

لاحظ أن RFC 1924 يحوّل العنوان المكوّن من 128 بت دفعة واحدة، بينما يعمل Git وPython وهذه الأداة على مجموعات من 4 بايتات، لذا تعطي القيمة المكوّنة من 16 بايت نتيجة مختلفة عن طريقة RFC.

المجموعات الأخيرة القصيرة

عندما لا يكون طول المدخلات من مضاعفات 4، تُملأ المجموعة الأخيرة ببايتات صفرية وتُرمَّز، ثم يُحتفظ بأول n + 1 حرف فقط: فالبايت الواحد يصبح حرفين، والبايتان يصبحان 3 أحرف، والبايتات الثلاثة تصبح 4 أحرف. وتعكس أداة فك الترميز هذه العملية، فلا حاجة إلى أحرف حشو. وليس في هذه النسخة اختصار للبايتات الصفرية، على خلاف z في Ascii85.

# Python 3.4+
import base64
base64.b85encode(b'hello')      # b'Xk~0{Zv'
base64.b85decode(b'Xk~0{Zv')    # b'hello'

المواصفات

الأبجدية0-9 A-Z a-z !#$%&()*+-;<=>?@^_`{|}~
حجم المخرجات5 أحرف لكل 4 بايتات (125%)
الحشولا يوجد
المعيارمجموعة أحرف RFC 1924 (Git وPython b85)
حساس لحالة الأحرفنعم

أمثلة

المدخلات (UTF-8)المخرجات
Hello, World!NM&qnZ!92JZ*pv8Ap
Base64.isLSb`dHZ(42a{
你好<h`KfrM&

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

هل Base85 هو نفسه Ascii85؟
يستخدمان العمليات الحسابية نفسها لكن بأحرف مختلفة، لذا تختلف مخرجاتهما. كما يختصر Ascii85 أربعة بايتات صفرية إلى z، وقد يُحاط بمحددات Adobe. استخدم صفحة Ascii85 لبيانات PDF وPostScript.
هل كان RFC 1924 معيارًا حقيقيًا؟

لا. إنه RFC إعلامي نُشر على سبيل دعابة كذبة أبريل، ولم يُستخدم قط لعناوين IPv6. وقد اشتهرت مجموعة أحرفه لاحقًا بفضل Git وPython.

كم تزيد مخرجات Base85 في الحجم؟
تصبح كل 4 بايتات 5 أحرف، لذا تبلغ المخرجات 1.25 ضعف المدخلات، مقابل نحو 1.33 ضعف في Base64. وbasE91 أكثر إيجازًا بقليل.
هل يمكنني وضع Base85 في JSON أو XML؟
في JSON نعم: فالأبجدية لا تحتوي على علامة اقتباس مزدوجة أو شرطة مائلة عكسية، فلا شيء يحتاج إلى تهريب. أما في XML وHTML فيجب تهريب الأحرف < و> و&. وBase85 ليس آمنًا لعناوين URL.