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

टेक्स्ट, हेक्स बाइट या फ़ाइलों को Z85 में बदलें और वापस पाएँ। Z85, ZeroMQ द्वारा परिभाषित Base85 वेरिएंट है, जिसकी वर्णमाला सोर्स कोड के स्ट्रिंग लिटरल में बिना एस्केपिंग के इस्तेमाल की जा सकती है।

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

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

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

Z85 क्या है?

Z85 को ZeroMQ RFC 32 में परिभाषित किया गया है (यह ZeroMQ समुदाय का स्पेसिफ़िकेशन है, IETF का RFC नहीं)। दूसरी Base85 एनकोडिंग की तरह यह भी हर 4 बाइट को 5 अक्षरों में बदलता है: हर समूह को बिग-एंडियन 32-बिट संख्या के रूप में पढ़ा जाता है और आधार 85 के 5 अंकों में लिखा जाता है, सबसे महत्वपूर्ण अंक पहले। आउटपुट इनपुट से 25% बड़ा होता है।

Z85 को अलग बनाती है उसकी वर्णमाला: 0-9, a-z, A-Z और 23 चिह्न .-:+=^!/*?&<>()[]{}@%$#। इसमें दोनों तरह के उद्धरण चिह्न, बैकस्लैश, बैकटिक, कॉमा, सेमीकोलन, वर्टिकल बार, टिल्डे और अंडरस्कोर शामिल नहीं हैं। यह वर्णमाला इस तरह बनाई गई थी कि सोर्स कोड की स्ट्रिंग में सुरक्षित रहे, इसलिए Z85 मान को C, Python या JSON में उद्धरण चिह्नों के बीच बिना किसी एस्केपिंग के पेस्ट किया जा सकता है।

Z85 का उपयोग कहाँ होता है

ZeroMQ, CurveZMQ कुंजियों को प्रिंट करने के लिए Z85 का उपयोग करता है। 32 बाइट की सार्वजनिक या सीक्रेट कुंजी 40 अक्षरों की Z85 स्ट्रिंग बन जाती है; zmq_curve_keypair() यही रूप लौटाता है और CURVE सुरक्षा के सॉकेट विकल्प भी यही रूप स्वीकार करते हैं। लाइब्रेरी zmq_z85_encode() और zmq_z85_decode() भी उपलब्ध कराती है, और pyzmq जैसी बाइंडिंग भी यही फ़ंक्शन देती हैं।

// C (libzmq)
char text[41];                       // 32 बाइट -> 40 अक्षर + NUL
zmq_z85_encode(text, key, 32);

# Python (pyzmq)
from zmq.utils import z85
z85.encode(bytes.fromhex('864fd26fb559f75b'))   # b'HelloWorld'

आख़िरी लाइन स्पेसिफ़िकेशन में दिया गया टेस्ट वेक्टर है।

इनपुट की लंबाई: इस टूल के बारे में एक नोट

RFC 32 के अनुसार बाइनरी इनपुट 4 बाइट का गुणज और एनकोड की गई स्ट्रिंग 5 अक्षरों का गुणज होनी चाहिए। इसमें कोई पैडिंग परिभाषित नहीं है, और zmq_z85_encode() जैसे सख़्त इम्प्लीमेंटेशन दूसरी लंबाइयों को अस्वीकार कर देते हैं।

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

तकनीकी विवरण

वर्णमाला0-9 a-z A-Z .-:+=^!/*?&<>()[]{}@%$#
आउटपुट का आकारहर 4 बाइट पर 5 अक्षर (125%)
पैडिंगकोई नहीं
मानकZeroMQ RFC 32
केस-संवेदीहाँ

उदाहरण

इनपुट (UTF-8)आउटपुट
Hello, World!nm=QNz.92jz/PV8aP
Base64.islsB}Dhz^42A@
你好<H}kFRm=

अक्सर पूछे जाने वाले प्रश्न

Z85 और Ascii85 में क्या अंतर है?
गणित एक ही है, वर्णमालाएँ अलग हैं। Ascii85 ! से u तक की ASCII रेंज का उपयोग करता है, जिसमें उद्धरण चिह्न और बैकस्लैश शामिल हैं, और उसमें शून्य बाइट के लिए z शॉर्टकट होता है। Z85 उन अक्षरों से बचता है जिन्हें स्ट्रिंग में एस्केप करना पड़ता है, और इसमें कोई शॉर्टकट नहीं है।
क्या Z85 में पैडिंग होती है?

नहीं। स्पेसिफ़िकेशन केवल उन्हीं इनपुट लंबाइयों की अनुमति देता है जो 4 बाइट का गुणज हों। यह टूल दूसरी लंबाइयों को छोटे अंतिम समूह के साथ एनकोड करता है, जो मानक का हिस्सा नहीं है।

क्या Z85 को JSON, XML या URL में इस्तेमाल किया जा सकता है?
JSON स्ट्रिंग में हाँ, बिना किसी एस्केपिंग के। XML और HTML में <, > और & को एस्केप करना ज़रूरी है। URL के लिए Z85 उपयुक्त नहीं है, क्योंकि वहाँ ?, &, / और # का विशेष अर्थ होता है; इसके बजाय Base64URL या Base58 का उपयोग करें।
Z85 में एनकोड की गई CurveZMQ कुंजी कितनी लंबी होती है?

CurveZMQ कुंजी 32 बाइट की होती है, इसलिए वह ठीक 40 अक्षरों में एनकोड होती है। रॉ कुंजी देखने के लिए उसे यहाँ हेक्स आउटपुट के साथ डिकोड करें।