Base64 वैलिडेटर

कोई स्ट्रिंग पेस्ट करें और पता करें कि वह मान्य Base64 है या नहीं। वैलिडेटर वेरिएंट का नाम बताता है, अमान्य अक्षरों और पैडिंग की समस्याओं की ओर इशारा करता है, और बताता है कि डेटा डिकोड होकर क्या बनता है।

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

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

  1. जिस स्ट्रिंग को जाँचना है, उसे इनपुट फ़ील्ड में पेस्ट करें।
  2. नतीजा पढ़ें: मान्य या अमान्य, पहचाना गया वेरिएंट (मानक या URL-सुरक्षित) और “डिकोड के बाद आकार”।
  3. अगर समस्याएँ सूचीबद्ध हैं, तो बताई गई स्थितियों की मदद से अमान्य अक्षर, व्हाइटस्पेस या ग़लत जगह लगी पैडिंग ढूँढें।
  4. “सामग्री” में पहचाना गया प्रकार देखें, ताकि पता चले कि डेटा टेक्स्ट है या 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 मान्य है?
अक्सर हाँ। Base64URL में आमतौर पर पैडिंग नहीं होती, और जब लंबाई संदर्भ से पता हो, तो RFC 4648 इसे छोड़ने की अनुमति देता है। फिर भी कुछ सख़्त डिकोडर इसकी माँग करते हैं; अगर कोई सिस्टम स्ट्रिंग को अस्वीकार करे, तो लंबाई 4 का गुणज होने तक = चिह्न जोड़ें। 4n + 1 अक्षरों वाली बिना पैडिंग की स्ट्रिंग कभी मान्य नहीं होती।
JavaScript में कैसे जाँचें कि कोई स्ट्रिंग Base64 है या नहीं?
सख़्त, पैडिंग वाले Base64 के लिए उसे ऐसे रेगुलर एक्सप्रेशन से जाँचें जो वर्णमाला के चार-चार अक्षरों के समूहों और उनके बाद वैकल्पिक पैडिंग की अनुमति देता हो। एक तेज़ तरीक़ा है try/catch के अंदर atob() को कॉल करना। ध्यान दें कि atob() ग़लत इनपुट पर InvalidCharacterError फेंकता है, लेकिन व्हाइटस्पेस और गायब पैडिंग को चुपचाप स्वीकार कर लेता है, और URL-सुरक्षित अक्षरों को स्वीकार नहीं करता।