कस्टम वर्णमाला एनकोडर और डिकोडर

अपनी वर्णमाला टाइप करें या किसी प्रीसेट से शुरुआत करें, फिर उससे एनकोड या डिकोड करें। किसी भी लंबाई की वर्णमाला के लिए “बड़ी संख्या” चुनें, या RFC 4648 शैली के आउटपुट के लिए “बिट समूह”।

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

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

  1. अपनी वर्णमाला टाइप करें, या कोई “प्रीसेट” चुनकर उसमें बदलाव करें। हर अक्षर केवल एक बार आ सकता है।
  2. “विधि” चुनें: किसी भी लंबाई की वर्णमाला के लिए “बड़ी संख्या (Base58 शैली)”, या 2, 4, 8, 16, 32 या 64 अक्षरों वाली वर्णमालाओं के लिए “बिट समूह (RFC 4648 शैली)”।
  3. बिट समूह के साथ आप चाहें तो “पैडिंग अक्षर” में ऐसा अक्षर दर्ज कर सकते हैं जो वर्णमाला का हिस्सा न हो।
  4. अपना टेक्स्ट एनकोड करें, या अपनी वर्णमाला में लिखी कोई स्ट्रिंग पेस्ट करके उसे डिकोड करें।

बाइट को अक्षरों से जोड़ने के दो तरीक़े

बड़ी संख्या विधि Base58 की तरह काम करती है। पूरे इनपुट को एक बड़े पूर्णांक के रूप में पढ़ा जाता है और उसे बार-बार वर्णमाला की लंबाई से भाग दिया जाता है; हर शेषफल एक अक्षर चुनता है। यह कम से कम 2 अक्षरों वाली किसी भी वर्णमाला के साथ काम करती है, जैसे 10, 36, 58 या 62। शुरुआती शून्य बाइट वर्णमाला के पहले अक्षर के रूप में लिखे जाते हैं, इसलिए एनकोड और फिर डिकोड करने पर भी वे बचे रहते हैं। इसमें पैडिंग नहीं होती, और इनपुट लगभग 20 KB तक सीमित है, क्योंकि लंबे डेटा पर गणना धीमी हो जाती है।

बिट समूह विधि RFC 4648 की तरह काम करती है। इनपुट को तय संख्या के बिट वाले टुकड़ों में काटा जाता है: 2 अक्षरों की वर्णमाला के लिए 1 बिट, 16 के लिए 4 बिट, 32 के लिए 5 बिट और 64 के लिए 6 बिट। हर टुकड़ा वर्णमाला में एक इंडेक्स होता है। हेक्स, Base32 और Base64 ठीक इसी तरह काम करते हैं, और आउटपुट की लंबाई केवल इनपुट की लंबाई पर निर्भर करती है।

दोनों विधियाँ अलग-अलग परिणाम क्यों देती हैं

एक विधि डेटा के संख्यात्मक मान को एनकोड करती है, और दूसरी उसके बिट को एक-एक स्थान के हिसाब से। परिणाम आमतौर पर अलग होते हैं, और किसी स्ट्रिंग को उसी विधि से डिकोड करना ज़रूरी है जिससे वह बनी थी।

वर्णमालाइनपुटबिट समूहबड़ी संख्या
मानक Base64HiSGk=Ehp
RFC 4648 Base32HiJBUQ====SDJ
01A010000011000001
0123456789Hiउपलब्ध नहीं18537

बिट समूह और पैडिंग के रूप में = के साथ, मानक वर्णमालाएँ सामान्य Base64 और Base32 ही बनाती हैं। बड़ी संख्या विधि A का शुरुआती शून्य बिट छोड़ देती है, क्योंकि वह एक मान लिखती है, तय संख्या में बिट नहीं। दस अंकों को वर्णमाला बनाने पर यह Hi के बाइट को बस एक दशमलव संख्या के रूप में दिखा देती है।

पैडिंग अक्षर केवल बिट समूह पर लागू होता है। 64 अक्षरों वाली वर्णमालाओं के लिए आउटपुट को 4 अक्षरों के गुणज तक, और 32 व 8 अक्षरों वाली वर्णमालाओं के लिए 8 के गुणज तक पैड किया जाता है। 2, 4 या 16 अक्षरों के साथ हर बाइट पूरे-पूरे अक्षर भरता है, इसलिए पैडिंग की कभी ज़रूरत नहीं पड़ती।

मान्य वर्णमाला के नियम

  • कम से कम दो अक्षर।
  • कोई दोहराव नहीं। डिकोडर हर अक्षर को ठीक एक मान से जोड़ता है। अगर a का मतलब 0 और 10 दोनों होता, तो उसे शामिल करने वाली स्ट्रिंग डिकोड नहीं हो पाती।
  • केस मायने रखता है। a और A अलग-अलग अक्षर हैं।
  • पैडिंग अक्षर वर्णमाला में नहीं होना चाहिए, वरना उसे डेटा से अलग पहचाना नहीं जा सकेगा।

सब कुछ आपके ब्राउज़र में चलता है, इसलिए आपकी वर्णमाला और डेटा आपके डिवाइस पर ही रहते हैं।

कस्टम वर्णमाला कब काम आती है

  • छिपे हुए ID। शफ़ल की गई वर्णमाला आइडेंटिफ़ायर को ऐसे टोकन में बदल देती है जिनमें कोई साफ़ पैटर्न नहीं दिखता। यह छिपाती है, सुरक्षा नहीं देती: वर्णमाला जानने वाला कोई भी उन्हें डिकोड कर सकता है।
  • मालिकाना या पुराने फ़ॉर्मैट। किसी सिस्टम के दस्तावेज़ से उसकी अपनी वर्णमाला कॉपी करें और उसका डेटा सीधे डिकोड करें।
  • सीखना। वर्णमाला की अलग-अलग लंबाइयों और दोनों विधियों की तुलना करके समझें कि आधार रूपांतरण कैसे काम करता है। तय वर्णमालाओं के लिए Base58 और Base62 देखें।

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

बड़ी संख्या और बिट समूह में क्या अंतर है?

बड़ी संख्या विधि पूरे इनपुट को एक पूर्णांक के रूप में नए आधार में बदलती है, Base58 की तरह, और किसी भी लंबाई की वर्णमाला के साथ काम करती है। बिट समूह विधि इनपुट को बिट के तय आकार वाले टुकड़ों में बाँटती है, Base64 की तरह, और इसके लिए 2, 4, 8, 16, 32 या 64 अक्षरों की वर्णमाला चाहिए।

मेरी कस्टम Base64 वर्णमाला का आउटपुट मानक Base64 से मेल क्यों नहीं खाता?

मानक Base64 बिट समूहों का उपयोग करता है। उससे मेल कराने के लिए बिट समूह विधि चुनें और = को पैडिंग अक्षर बनाएँ। बड़ी संख्या विधि उसी वर्णमाला से बिल्कुल अलग स्ट्रिंग बनाती है।

दोहराए गए अक्षरों की अनुमति क्यों नहीं है?

हर अक्षर को ठीक एक मान में डिकोड होना चाहिए। दोहराए गए अक्षर के दो मतलब होंगे, और मूल डेटा भरोसेमंद तरीक़े से वापस नहीं पाया जा सकेगा।

क्या बड़ी संख्या विधि के साथ पैडिंग अक्षर इस्तेमाल किया जा सकता है?

नहीं। बड़ी संख्या वाले आउटपुट का कोई तय ब्लॉक आकार नहीं होता, इसलिए पैड करने के लिए कुछ नहीं होता। पैडिंग विकल्प केवल बिट समूह पर लागू होता है।

क्या कस्टम वर्णमाला एन्क्रिप्शन का एक रूप है?

नहीं। यह अब भी बिना कुंजी वाली एनकोडिंग ही है। शफ़ल की गई वर्णमाला डेटा को एक नज़र में पहचानना मुश्किल बना सकती है, लेकिन इसे सीक्रेट की सुरक्षा के लिए कभी इस्तेमाल नहीं करना चाहिए।