Base85 एनकोडर और डिकोडर

टेक्स्ट, हेक्स बाइट या फ़ाइलों को Base85 में बदलें और वापस पाएँ। यह पेज RFC 1924 कैरेक्टर सेट का उपयोग करता है, यानी वह वेरिएंट जो Python b85encode बनाता है और जो Git बाइनरी पैच में इस्तेमाल होता है।

पूरी तरह आपके ब्राउज़र में चलता है। कुछ भी अपलोड नहीं होता।

उपयोग कैसे करें

  1. टेक्स्ट या बाइट को Base85 में बदलने के लिए “एनकोड करें” चुनें, या Base85 को वापस डेटा में बदलने के लिए “डिकोड करें” चुनें।
  2. अपना इनपुट टाइप या पेस्ट करें, या कोई फ़ाइल खोलें। अगर आप रॉ बाइट के साथ काम कर रहे हैं, तो इनपुट को “हेक्स” पर कर दें।
  3. टाइप करते ही परिणाम अपडेट होता जाता है। डिकोड करते समय, डेटा में जो है उसके अनुसार “टेक्स्ट” या “हेक्स” आउटपुट चुनें।
  4. परिणाम कॉपी करें या उसे फ़ाइल के रूप में डाउनलोड करें।

Base85 क्या है?

Base85 एनकोडिंग का एक परिवार है, जो हर 4 बाइट को 5 अक्षरों में बदलता है। आधार 85 के पाँच अंक 85 × 85 × 85 × 85 × 85 = 4,437,053,125 मान रख सकते हैं, जो किसी भी 32-बिट संख्या के लिए ठीक पर्याप्त है, इसलिए आउटपुट इनपुट से केवल 25% बड़ा होता है, जबकि Base64 में यह बढ़त 33% होती है।

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", यानी IPv6 एड्रेस का संक्षिप्त निरूपण है। इसे 1 अप्रैल 1996 को अप्रैल फ़ूल के मज़ाक के रूप में प्रकाशित किया गया था। इसमें 128-बिट IPv6 एड्रेस को ठीक 20 अक्षरों की एक आधार-85 संख्या के रूप में लिखने का प्रस्ताव था। कोई भी IPv6 एड्रेस इस तरह नहीं लिखता, लेकिन बाद में यही वर्णमाला सामान्य बाइनरी डेटा के लिए अपना ली गई:

  • Git पैच में (git diff --binary, git format-patch) बाइनरी फ़ाइलों को zlib से कंप्रेस किए गए डेटा के रूप में रखता है, जिसे इसी वर्णमाला से एनकोड किया जाता है, और हर लाइन की शुरुआत में लंबाई बताने वाला एक अक्षर होता है।
  • Python 3.4 और उसके बाद के वर्ज़न base64.b85encode() और b85decode() देते हैं, जिनका आउटपुट इस टूल के आउटपुट से मेल खाता है।
  • Mercurial Git-शैली के diff में बाइनरी फ़ाइलों के लिए यही एनकोडिंग इस्तेमाल करता है।

ध्यान दें कि RFC 1924 पूरे 128-बिट एड्रेस को एक साथ बदलता है, जबकि Git, Python और यह टूल 4 बाइट के समूहों में काम करते हैं, इसलिए 16 बाइट के किसी मान का परिणाम RFC वाली विधि से अलग आता है।

छोटे अंतिम समूह

जब इनपुट की लंबाई 4 का गुणज नहीं होती, तो आख़िरी समूह को शून्य बाइट से भरकर एनकोड किया जाता है और केवल पहले n + 1 अक्षर रखे जाते हैं: 1 बाइट 2 अक्षर बनता है, 2 बाइट 3 और 3 बाइट 4। डिकोडर इस प्रक्रिया को उलट देता है, इसलिए किसी पैडिंग अक्षर की ज़रूरत नहीं होती। Ascii85 के z के विपरीत, इस वेरिएंट में शून्य बाइट के लिए कोई शॉर्टकट नहीं है।

# 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 !#$%&()*+-;<=>?@^_`{|}~
आउटपुट का आकारहर 4 बाइट पर 5 अक्षर (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 डिलिमिटर में लपेटा जा सकता है। PDF और PostScript डेटा के लिए Ascii85 पेज का उपयोग करें।
क्या RFC 1924 कोई असली मानक था?

नहीं। यह अप्रैल फ़ूल के मज़ाक के रूप में प्रकाशित एक सूचनात्मक RFC है और IPv6 एड्रेस के लिए इसका कभी उपयोग नहीं हुआ। इसका कैरेक्टर सेट बाद में Git और Python के ज़रिए लोकप्रिय हुआ।

Base85 आउटपुट कितना बड़ा होता है?
हर 4 बाइट 5 अक्षर बन जाते हैं, इसलिए आउटपुट इनपुट का 1.25 गुना होता है। Base64 का आउटपुट लगभग 1.33 गुना होता है। basE91 इससे भी थोड़ा अधिक कॉम्पैक्ट है।
क्या Base85 को JSON या XML में रखा जा सकता है?
JSON में हाँ: इस वर्णमाला में डबल कोट या बैकस्लैश नहीं है, इसलिए कुछ भी एस्केप करने की ज़रूरत नहीं होती। XML और HTML में <, > और & अक्षरों को एस्केप करना ज़रूरी है। Base85 URL-सुरक्षित नहीं है।