उपयोग कैसे करें
- “एनकोड करें” या “डिकोड करें” चुनें। URL-सुरक्षित वेरिएंट पहले से चुना रहता है और पैडिंग बंद रहती है।
- टेक्स्ट टाइप या पेस्ट करें, हेक्स बाइट दर्ज करें, या कोई फ़ाइल खोलें। टाइप करते ही परिणाम अपडेट होता जाता है।
- “पैडिंग” तभी चालू करें जब प्राप्त करने वाले सिस्टम को अंत में = चिह्न चाहिए हों।
- परिणाम कॉपी करें या डाउनलोड करें।
Base64URL क्या है?
Base64URL को RFC 4648 के खंड 5 में "Base 64 Encoding with URL and Filename Safe Alphabet", यानी URL और फ़ाइल नाम के लिए सुरक्षित वर्णमाला वाली Base 64 एनकोडिंग के रूप में परिभाषित किया गया है। यह ठीक मानक Base64 की तरह काम करता है, प्रति अक्षर 6 बिट, लेकिन उन दो अक्षरों को बदल देता है जो URL और फ़ाइल पाथ में परेशानी पैदा करते हैं:
| मानक Base64 | Base64URL | |
|---|---|---|
| मान 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.is | QmFzZTY0Lmlz |
你好 | 5L2g5aW9 |
अक्सर पूछे जाने वाले प्रश्न
क्या Base64URL और Base64 स्ट्रिंग को URL-एनकोड करना एक ही बात है?
+, / और = क्रमशः %2B, %2F और %3D बन जाते हैं, जिससे स्ट्रिंग लंबी हो जाती है। Base64URL एक अलग वर्णमाला का उपयोग करता है, इसलिए किसी एस्केपिंग की ज़रूरत ही नहीं पड़ती। रूपांतरण किए बिना इन दोनों रूपों को एक-दूसरे की जगह इस्तेमाल नहीं किया जा सकता।क्या Base64URL में पैडिंग होनी चाहिए?
urlsafe_b64encode और Java का डिफ़ॉल्ट URL एनकोडर इसे जोड़ते हैं। संदेह हो तो इसे छोड़ दें; यह डिकोडर दोनों रूप स्वीकार करता है।मानक Base64 डिकोडर मेरी Base64URL स्ट्रिंग को अस्वीकार क्यों करता है?
- और _ स्वीकार नहीं करते, और कुछ को पैडिंग भी चाहिए। अक्षरों को बदलें और लंबाई को 4 का गुणज बनाने के लिए = चिह्न जोड़ें, या स्ट्रिंग को यहीं डिकोड करें।PKCE कोड चैलेंज की जाँच कैसे करें?
BASE64URL(SHA256(code_verifier)) होता है। इसे यहाँ हेक्स आउटपुट के साथ डिकोड करें: सही मान ठीक 32 बाइट देता है, जिनकी तुलना आप वेरिफ़ायर के SHA-256 हैश से कर सकते हैं।