Base64 URL-safe
URL-safe Base64 (Base64url) एन्कोड और डीकोड करें
सादा टेक्स्ट
Base64
Base64url एन्कोडिंग क्या है?
Base64url, Base64 एन्कोडिंग का एक रूपांतर है जिसे विशेष रूप से URL, फ़ाइलनामों और अन्य ऐसे संदर्भों में उपयोग के लिए तैयार किया गया है जहाँ मानक Base64 के + और / वर्ण समस्या उत्पन्न करते हैं। RFC 4648 धारा 5 में परिभाषित, Base64url + को - (हाइफ़न) और / को _ (अंडरस्कोर) से बदलता है, और अंत के = पैडिंग वर्णों को हटा देता है। इसका परिणाम एक ऐसी स्ट्रिंग होती है जिसे URL क्वेरी पैरामीटर, फ़ाइलनाम या HTTP हेडर में अतिरिक्त percent-encoding की आवश्यकता के बिना सीधे एम्बेड किया जा सकता है।
मानक Base64 (RFC 4648 धारा 4) 64 वर्णों का उपयोग करता है: A-Z, a-z, 0-9, + और /। + और / वर्ण URL में आरक्षित हैं: क्वेरी स्ट्रिंग में + को रिक्त स्थान के रूप में समझा जाता है (application/x-www-form-urlencoded में), और / एक पथ-विभाजक है। इसलिए URL के अंदर मानक Base64 उपयोग करने पर इन वर्णों को percent-encode करना पड़ता है (%2B, %2F), जिससे स्ट्रिंग की लंबाई बढ़ती है और पठनीयता कम होती है। Base64url इस समस्या को पूरी तरह समाप्त करता है क्योंकि यह शुरू से ही URL-सुरक्षित वर्णों का उपयोग करता है।
Base64url का सबसे प्रमुख उपयोग JSON Web Tokens (JWT) में है। JWT के तीनों खंड — हेडर, पेलोड और हस्ताक्षर — Base64url-एन्कोडेड होते हैं। OAuth 2.0 PKCE code verifier, WebAuthn चैलेंज मान और कई API टोकन योजनाएँ भी Base64url पर निर्भर करती हैं। प्रमाणीकरण, प्राधिकरण या क्रिप्टोग्राफ़िक डेटा विनिमय पर कार्य करने वाले प्रत्येक डेवलपर के लिए इस एन्कोडिंग को समझना आवश्यक है।
यह Base64url टूल क्यों उपयोग करें?
Base64url और सादे पाठ या बाइनरी डेटा के बीच सीधे अपने ब्राउज़र में रूपांतरण करें। एन्कोडिंग और डीकोडिंग दोनों समर्थित हैं, पैडिंग और वर्ण प्रतिस्थापन स्वचालित रूप से संभाले जाते हैं।
Base64url के उपयोग के मामले
मानक Base64 बनाम Base64url
Base64url, मानक Base64 से ठीक तीन तरीकों से भिन्न है। एन्कोडिंग एल्गोरिदम समान है — केवल वर्णमाला और पैडिंग व्यवहार बदलता है:
| विशेषता | मानक (RFC 4648 §4) | Base64url (RFC 4648 §5) |
|---|---|---|
| Index 62 | + | - |
| Index 63 | / | _ |
| Padding | = (required) | Omitted |
इन तीन अंतरों का अर्थ है कि मानक Base64 और Base64url के बीच रूपांतरण सरल है: + को - से, / को _ से बदलें और अंत के = वर्ण हटा दें। विपरीत दिशा में, - को + से, _ को / से बदलें और पैडिंग पुनः जोड़ें ताकि लंबाई 4 की गुणज बने। अधिकांश भाषाएँ मूल Base64url समर्थन प्रदान करती हैं, इसलिए मैन्युअल रूपांतरण अनावश्यक है।
एन्कोडिंग तुलना तालिका
नीचे की तालिका एक ही इनपुट को मानक Base64 और Base64url दोनों से एन्कोड करके दिखाती है। ध्यान दें कि URL-safe रूपांतर में पैडिंग वर्ण (=) हटा दिए जाते हैं और + / / को - / _ से बदला जाता है:
| इनपुट | मानक Base64 | Base64url (बिना पैडिंग) |
|---|---|---|
| Hello | SGVsbG8= | SGVsbG8 |
| A | QQ== | |
| 1+1=2 | MSsxPTI= | MSsxPTI |
| subject?ref=1 | c3ViamVjdD9yZWY9MQ== | c3ViamVjdD9yZWY9MQ |
| ð (thumbs up) | 8J+RjQ== | 8J-RjQ |
कोड उदाहरण
लोकप्रिय भाषाओं में Base64url स्ट्रिंग एन्कोड और डीकोड कैसे करें। प्रत्येक उदाहरण ऐसा आउटपुट देता है जो URL, फ़ाइलनामों और HTTP हेडर में उपयोग के लिए सुरक्षित है:
// Encode to Base64url
function toBase64url(str) {
return btoa(unescape(encodeURIComponent(str)))
.replace(/\+/g, '-')
.replace(/\//g, '_')
.replace(/=+$/, '')
}
toBase64url('Hello!') // → "SGVsbG8h"
// Decode from Base64url
function fromBase64url(b64url) {
const b64 = b64url.replace(/-/g, '+').replace(/_/g, '/')
const pad = (4 - b64.length % 4) % 4
return decodeURIComponent(escape(atob(b64 + '='.repeat(pad))))
}
fromBase64url('SGVsbG8h') // → "Hello!"// Native base64url support since Node 15.7
const encoded = Buffer.from('Hello!').toString('base64url')
// → "SGVsbG8h"
const decoded = Buffer.from('SGVsbG8h', 'base64url').toString()
// → "Hello!"
// Decode a JWT payload
const jwt = 'eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0...'
const payload = JSON.parse(Buffer.from(jwt.split('.')[1], 'base64url').toString())
// → { sub: "1234567890" }import base64
# Encode to Base64url (no padding)
encoded = base64.urlsafe_b64encode(b'Hello!').rstrip(b'=').decode()
# → "SGVsbG8h"
# Decode from Base64url (re-add padding)
def b64url_decode(s: str) -> bytes:
s += '=' * (4 - len(s) % 4) # restore padding
return base64.urlsafe_b64decode(s)
b64url_decode('SGVsbG8h') # → b'Hello!'package main
import (
"encoding/base64"
"fmt"
)
func main() {
// Encode to Base64url (no padding)
encoded := base64.RawURLEncoding.EncodeToString([]byte("Hello!"))
fmt.Println(encoded) // → "SGVsbG8h"
// Decode from Base64url
decoded, _ := base64.RawURLEncoding.DecodeString("SGVsbG8h")
fmt.Println(string(decoded)) // → "Hello!"
}