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

टेक्स्ट, हेक्स बाइट या फ़ाइलों को URL-सुरक्षित Base64 में बदलें और वापस पाएँ। इसकी वर्णमाला में + और / की जगह - और _ होते हैं, और पैडिंग डिफ़ॉल्ट रूप से बंद रहती है, जैसा कि JSON Web Token और OAuth PKCE में होता है।

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

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

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

Base64URL क्या है?

Base64URL को RFC 4648 के खंड 5 में "Base 64 Encoding with URL and Filename Safe Alphabet", यानी URL और फ़ाइल नाम के लिए सुरक्षित वर्णमाला वाली Base 64 एनकोडिंग के रूप में परिभाषित किया गया है। यह ठीक मानक Base64 की तरह काम करता है, प्रति अक्षर 6 बिट, लेकिन उन दो अक्षरों को बदल देता है जो URL और फ़ाइल पाथ में परेशानी पैदा करते हैं:

मानक Base64Base64URL
मान 62+-
मान 63/_
पैडिंग=, ज़रूरीआमतौर पर छोड़ दी जाती है

URL में + को स्पेस समझा जा सकता है, / पाथ के हिस्सों को अलग करता है और = क्वेरी पैरामीटर के नाम को उसके मान से अलग करता है, इसलिए मानक Base64 को किसी लिंक में डालने से पहले परसेंट-एनकोड करना पड़ता है। Base64URL को किसी एस्केपिंग की ज़रूरत नहीं होती। जब लंबाई संदर्भ से पता हो, तो RFC 4648 पैडिंग छोड़ने की अनुमति देता है, और Base64URL पर आधारित ज़्यादातर स्पेसिफ़िकेशन ठीक यही करते हैं।

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

  • JSON Web Token। JWT का हेडर, पेलोड और सिग्नेचर, तीनों बिना पैडिंग वाले Base64URL में होते हैं (RFC 7515)। किसी JWT को पढ़ने के लिए JWT डिकोडर का उपयोग करें।
  • OAuth 2.0 PKCE। code_challenge कोड वेरिफ़ायर के SHA-256 हैश का बिना पैडिंग वाला Base64URL रूप है (RFC 7636), इसलिए यह हमेशा 43 अक्षर लंबा होता है।
  • JSON Web Key और WebAuthn। n, e, x और y जैसे कुंजी पैरामीटर, और साथ ही WebAuthn चैलेंज और क्रेडेंशियल ID, Base64URL के रूप में भेजे जाते हैं।
  • टोकन, ID और फ़ाइल नाम। रीसेट लिंक, साइन किए गए URL और कैश कुंजियाँ बिना एस्केपिंग के Base64URL ले जाती हैं; 16 बाइट की रैंडम ID 22 अक्षरों की बन जाती है। केस-असंवेदी फ़ाइल सिस्टम पर Base32 को प्राथमिकता दें, क्योंकि Base64URL अक्षरों के केस (छोटे-बड़े अक्षर) पर निर्भर करता है।

Base64 और Base64URL के बीच रूपांतरण

दोनों वेरिएंट एक ही बाइट को एनकोड करते हैं, इसलिए रूपांतरण केवल अक्षरों की अदला-बदली है: + को - से और / को _ से बदलें, फिर अंत के = हटा दें। वापस जाने के लिए अक्षरों को फिर से बदलें और लंबाई 4 का गुणज होने तक = जोड़ें। इस पेज का डिकोडर दोनों वर्णमालाएँ स्वीकार करता है, पैडिंग के साथ भी और उसके बिना भी।

// Node.js 16+
Buffer.from(data).toString('base64url')
Buffer.from(str, 'base64url')

# Python (urlsafe_b64encode पैडिंग बनाए रखता है)
base64.urlsafe_b64encode(data).rstrip(b'=')

// Go
base64.RawURLEncoding.EncodeToString(data)

// Java
Base64.getUrlEncoder().withoutPadding().encodeToString(bytes)

तकनीकी विवरण

वर्णमालाA-Z a-z 0-9 - _
आउटपुट का आकारहर 3 बाइट पर 4 अक्षर (लगभग 133%)
पैडिंगवैकल्पिक, आमतौर पर छोड़ दी जाती है
मानकRFC 4648 खंड 5
केस-संवेदीहाँ

उदाहरण

इनपुट (UTF-8)आउटपुट
Hello, World!SGVsbG8sIFdvcmxkIQ
Base64.isQmFzZTY0Lmlz
你好5L2g5aW9

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

क्या Base64URL और Base64 स्ट्रिंग को URL-एनकोड करना एक ही बात है?
नहीं। मानक Base64 को परसेंट-एनकोड करने पर +, / और = क्रमशः %2B, %2F और %3D बन जाते हैं, जिससे स्ट्रिंग लंबी हो जाती है। Base64URL एक अलग वर्णमाला का उपयोग करता है, इसलिए किसी एस्केपिंग की ज़रूरत ही नहीं पड़ती। रूपांतरण किए बिना इन दोनों रूपों को एक-दूसरे की जगह इस्तेमाल नहीं किया जा सकता।
क्या Base64URL में पैडिंग होनी चाहिए?
यह इस पर निर्भर करता है कि उसे कौन पढ़ेगा। JWT, JSON Web Key और PKCE में पैडिंग छोड़ना ज़रूरी है, जबकि Python का urlsafe_b64encode और Java का डिफ़ॉल्ट URL एनकोडर इसे जोड़ते हैं। संदेह हो तो इसे छोड़ दें; यह डिकोडर दोनों रूप स्वीकार करता है।
मानक Base64 डिकोडर मेरी Base64URL स्ट्रिंग को अस्वीकार क्यों करता है?
सख़्त मानक डिकोडर - और _ स्वीकार नहीं करते, और कुछ को पैडिंग भी चाहिए। अक्षरों को बदलें और लंबाई को 4 का गुणज बनाने के लिए = चिह्न जोड़ें, या स्ट्रिंग को यहीं डिकोड करें।
PKCE कोड चैलेंज की जाँच कैसे करें?
चैलेंज बिना पैडिंग वाला BASE64URL(SHA256(code_verifier)) होता है। इसे यहाँ हेक्स आउटपुट के साथ डिकोड करें: सही मान ठीक 32 बाइट देता है, जिनकी तुलना आप वेरिफ़ायर के SHA-256 हैश से कर सकते हैं।