उपयोग कैसे करें
- जिस स्ट्रिंग को जाँचना है, उसे इनपुट फ़ील्ड में पेस्ट करें।
- नतीजा पढ़ें: मान्य या अमान्य, पहचाना गया वेरिएंट (मानक या URL-सुरक्षित) और “डिकोड के बाद आकार”।
- अगर समस्याएँ सूचीबद्ध हैं, तो बताई गई स्थितियों की मदद से अमान्य अक्षर, व्हाइटस्पेस या ग़लत जगह लगी पैडिंग ढूँढें।
- “सामग्री” में पहचाना गया प्रकार देखें, ताकि पता चले कि डेटा टेक्स्ट है या PNG, PDF या ZIP जैसी कोई फ़ाइल।
Base64 को मान्य क्या बनाता है
- वर्णमाला। केवल
A-Z,a-z,0-9और दो अतिरिक्त अक्षरों की अनुमति है: मानक Base64 में+और/, और Base64URL में-और_। जिस स्ट्रिंग में दोनों जोड़े मिले हुए हों, वह आमतौर पर ख़राब हो चुकी होती है या दो अलग स्रोतों से जोड़कर बनाई गई होती है। - पैडिंग।
=चिह्न केवल अंत में और अधिकतम दो बार आ सकता है। बीच में पैडिंग का आमतौर पर मतलब है कि दो एनकोड किए गए मान आपस में जोड़ दिए गए हैं। - लंबाई। पैडिंग के साथ लंबाई 4 का गुणज होती है। पैडिंग के बिना 4n + 1 को छोड़कर कोई भी लंबाई चलती है: एक बचा हुआ अक्षर केवल 6 बिट रखता है, जो एक बाइट के लिए काफ़ी नहीं है।
सख़्त डिकोडर एक और नियम जोड़ते हैं: आख़िरी अक्षर के अप्रयुक्त निचले बिट शून्य होने चाहिए। कई डिकोडर इन बिट को अनदेखा कर देते हैं, लेकिन कुछ, जैसे Go का base64.StdEncoding.Strict(), ऐसी स्ट्रिंग को अस्वीकार कर देते हैं।
आम ग़लतियाँ और उन्हें ठीक करने का तरीक़ा
| समस्या | आम कारण | समाधान |
|---|---|---|
| अमान्य अक्षर | मान के साथ कॉपी हो गए उद्धरण चिह्न, बैकस्लैश या %2B और %3D एस्केप | अतिरिक्त अक्षर हटाएँ या पहले URL-डिकोड करें |
| बीच में स्पेस | मान के URL या फ़ॉर्म से गुज़रते समय + स्पेस में बदल गए | + वापस लगाएँ, या URL के लिए Base64URL का उपयोग करें |
| 4n + 1 की लंबाई | कॉलम की सीमा, लॉग लाइन या अधूरी कॉपी के कारण मान कट गया | पूरा मान दोबारा कॉपी करें |
| बीच में पैडिंग | दो Base64 स्ट्रिंग एक साथ जुड़ गईं | उन्हें अलग करें और हर हिस्से को अलग से डिकोड करें |
| लाइन ब्रेक | MIME या PEM रैपिंग | आमतौर पर हानिरहित; जहाँ एक ही लाइन ज़रूरी हो, वहाँ इन्हें हटा दें |
मान्य होने का मतलब सार्थक होना नहीं
Base64 में न कोई हेडर होता है, न कोई चेकसम, इसलिए मान्य होने का मतलब केवल इतना है कि स्ट्रिंग डिकोड की जा सकती है। कई साधारण अंग्रेज़ी शब्द भी यह जाँच पास कर लेते हैं: कोई भी चार लैटिन अक्षर मिलकर एक मान्य समूह बनाते हैं। इसीलिए वैलिडेटर डेटा को डिकोड भी करता है और उसका आकार व सामग्री का प्रकार बताता है। पढ़ने योग्य टेक्स्ट या PNG, PDF या ZIP जैसा कोई जाना-पहचाना फ़ाइल सिग्नेचर इस बात का अच्छा सबूत है कि स्ट्रिंग सचमुच Base64 है; कुछ बेतरतीब बाइट ऐसा सबूत नहीं हैं। दूसरी एनकोडिंग भी जाँचने के लिए एनकोडिंग डिटेक्टर आज़माएँ।
कोड में Base64 की जाँच करना
// JavaScript: पैडिंग वाला मानक Base64 (ख़ाली स्ट्रिंग से भी मेल खाता है)
/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/
# Python: अमान्य अक्षरों को छोड़ने के बजाय त्रुटि दें
import base64, binascii
try:
base64.b64decode(s, validate=True)
except binascii.Error:
print('invalid')
अक्सर पूछे जाने वाले प्रश्न
किसी साधारण शब्द को मान्य Base64 क्यों बताया जाता है?
test तीन बाइट में डिकोड होता है। पहचाना गया सामग्री प्रकार देखें: अगर परिणाम न तो पढ़ने योग्य टेक्स्ट है और न ही कोई जाना-पहचाना फ़ाइल प्रकार, तो इनपुट शायद कभी Base64 था ही नहीं।क्या स्पेस या लाइन ब्रेक वाला Base64 मान्य है?
MIME और PEM, Base64 को लाइनों में रैप करते हैं, और ज़्यादातर डिकोडर व्हाइटस्पेस को छोड़ देते हैं। हालाँकि JSON फ़ील्ड, HTTP हेडर, JWT और data URI एक लगातार, बिना टूटी स्ट्रिंग की अपेक्षा करते हैं। वैलिडेटर व्हाइटस्पेस को अलग से दिखाता है, ताकि आप तय कर सकें कि जहाँ स्ट्रिंग का उपयोग होगा, वहाँ इससे फ़र्क पड़ता है या नहीं।
क्या = पैडिंग के बिना Base64 मान्य है?
= चिह्न जोड़ें। 4n + 1 अक्षरों वाली बिना पैडिंग की स्ट्रिंग कभी मान्य नहीं होती।JavaScript में कैसे जाँचें कि कोई स्ट्रिंग Base64 है या नहीं?
try/catch के अंदर atob() को कॉल करना। ध्यान दें कि atob() ग़लत इनपुट पर InvalidCharacterError फेंकता है, लेकिन व्हाइटस्पेस और गायब पैडिंग को चुपचाप स्वीकार कर लेता है, और URL-सुरक्षित अक्षरों को स्वीकार नहीं करता।