YamlBox

वेब और एन्कोडिंग · 5 मिनट पढ़ें

Base64 डिकोड और एनकोड: परिवहन के लिए, सुरक्षा के लिए नहीं

Base64 बाइनरी डेटा को उन चैनलों के माध्यम से स्थानांतरित करने के लिए मौजूद है जो केवल पाठ स्वीकार करते हैं। यह प्रत्येक तीन बाइट्स को चार प्रिंट करने योग्य वर्णों में मैप करता है, यही कारण है कि एन्कोडेड आउटपुट इनपुट से लगभग एक तिहाई बड़ा होता है और बेस 64 डिकोड पूरी तरह से प्रतिवर्ती होता है - बिना किसी कुंजी के, क्योंकि बेस 64 एन्कोडिंग है, एन्क्रिप्शन नहीं। आपके द्वारा एनकोड किए गए किसी भी चीज़ को कोई भी डीकोड कर सकता है, और कोई भी टूल जो अन्यथा सुझाव देता है वह आपसे झूठ बोल रहा है।

अद्यतन

वर्णमाला और गद्दी

मानक वर्णमाला `A–Z`, `a–z`, `0–9`, `+` और `/` है, जब इनपुट लंबाई तीन से अधिक न हो तो अंतिम समूह को `=` पैडिंग के साथ रखा जाता है। वह पैडिंग सजावटी नहीं है: यह डिकोडर को बताता है कि अंतिम समूह में कितने बाइट्स हैं। इसे अलग करना यूआरएल में आम है और काम करता है क्योंकि डिकोडर लंबाई का अनुमान लगाते हैं, लेकिन सख्त कार्यान्वयन बिना पैड किए गए फॉर्म को अस्वीकार कर देगा।

                "YamlBox"  →  WWFtbEJveA==
"YamlBo"   →  WWFtbEJv
              

बेस64यूआरएल: वह वैरिएंट जो टोकन में समाप्त होता है

URL `+`, `/` और `=` को महत्वपूर्ण मानते हैं, इसलिए बेस64url वैरिएंट उन्हें `-` और `_` से बदल देता है और अक्सर पैडिंग को पूरी तरह से छोड़ देता है। प्रत्येक JSON वेब टोकन इस वर्णमाला का उपयोग करता है, यही कारण है कि एक सख्त Base64 डिकोडर में चिपकाया गया JWT पेलोड उन वर्णों पर विफल हो सकता है जो बिल्कुल सामान्य दिखते हैं। यदि कोई स्ट्रिंग किसी ऐसी चीज़ को डिकोड करती है जो पढ़ने योग्य तो नहीं है, लेकिन आम तौर पर आप उत्तर से एक अक्षर की दूरी पर होते हैं।

जहाँ आप इसे व्यवहार में पाते हैं

  • डेटा यूआरआई - छोटी छवियों और फ़ॉन्ट को सीधे सीएसएस या HTML में `data:image/png;base64,…` के रूप में एम्बेड करना।
  • JSON वेब टोकन - तीन खंडों में से प्रत्येक बेस64यूआरएल एन्कोडेड है।
  • HTTP बेसिक प्रमाणीकरण - `Authorization: Basic` `user:password` का बेस64 रखता है, यही कारण है कि इसे हमेशा टीएलएस पर यात्रा करनी चाहिए।
  • ईमेल अनुलग्नक - MIME ने 1980 के दशक से बाइनरी भागों के लिए बेस 64 का उपयोग किया है।
  • एपीआई जो बाइनरी स्वीकार नहीं कर सकते - छवि पेलोड और केवल-टेक्स्ट फ़ील्ड में रखी गई कुंजियाँ।

क्यों Base64 डिकोड आउटपुट कचरे जैसा दिखता है

क्लासिक विफलता यूनिकोड है। जावास्क्रिप्ट के पुराने `btoa` और `atob` प्रति वर्ण एक बाइट पर काम करते हैं, इसलिए `é`, `₹` या किसी भी इमोजी वाली एक स्ट्रिंग या तो मोजिबेक फेंकती है या उत्पन्न करती है। समाधान यह है कि पहले UTF-8 बाइट्स को एन्कोड किया जाए - ब्राउज़र में `TextEncoder`, नोड में `Buffer.from(str, "utf8")` - और फिर बेस64 को। यदि कोई डिकोड विश्वसनीय दिखने वाले लेकिन गलत अक्षर लौटाता है, तो सबसे संभावित कारण यह है कि एनकोडर ने टेक्स्ट को कभी भी यूटीएफ-8 बाइट्स में परिवर्तित नहीं किया है।

Base64 कोई गोपनीयता या अखंडता प्रदान नहीं करता है। किसी एन्कोडेड रहस्य के साथ बिल्कुल वैसा ही व्यवहार करें जैसा आप कच्चे रहस्य के साथ करते हैं, क्योंकि यह वही है।

स्थानीय स्तर पर डिकोड क्यों करें?

बेसिक-ऑथ हेडर, टोकन और डेटा यूआरआई सभी क्रेडेंशियल या निजी डेटा को डिकोड करते हैं, इसलिए उन्हें सर्वर-साइड डिकोडर में चिपकाना एक प्रकटीकरण है। YamlBox Base64 एनकोडर/डिकोडर पेज में UTF-8 हैंडलिंग सही तरीके से काम करता है, मानक और URL-सुरक्षित वर्णमाला दोनों का समर्थन करता है, और ऑफ़लाइन कार्य करता है।

Base64 एनकोडर / डिकोडर - अक्सर पूछे जाने वाले प्रश्न

क्या Base64 एन्क्रिप्शन है?

नहीं, यह बिना किसी कुंजी के एक प्रतिवर्ती एन्कोडिंग है, इसलिए कोई भी इसे डिकोड कर सकता है। यह मौजूद है इसलिए बाइनरी डेटा केवल टेक्स्ट चैनलों के माध्यम से यात्रा कर सकता है - डेटा की सुरक्षा के लिए कभी नहीं। गोपनीयता के लिए टीएलएस और एईएस-जीसीएम जैसे वास्तविक एन्क्रिप्शन का उपयोग करें।

Base64 आउटपुट कितना बड़ा है?

बिल्कुल एक तिहाई बड़ा, साथ ही थोड़ी पैडिंग, क्योंकि तीन बाइट्स चार अक्षर बन जाते हैं। यही कारण है कि बेस64 का उपयोग छोटी संपत्तियों के लिए किया जाता है और बड़ी संपत्तियों के लिए इससे बचा जाता है।

Base64 डिकोड अजीब अक्षर क्यों लौटाता है?

आम तौर पर एक एन्कोडिंग बेमेल: एन्कोडिंग से पहले मूल पाठ को यूटीएफ -8 बाइट्स में परिवर्तित नहीं किया गया था, या आप एक मानक डिकोडर के साथ बेस 64url डेटा को डिकोड कर रहे हैं। `-` और `_` वर्णों की जाँच करें, और उपयोग किए गए स्रोत एन्कोडर UTF-8 की पुष्टि करें।

इस पोस्ट में उल्लिखित उपकरण

19 टूल की पूरी सूची ब्राउज़ करें

पढ़ने के लिए और लेख

6 मिनट पढ़ें

JWT डिकोडर: टोकन के अंदर क्या है, और क्या नहीं है

टोकन के हेडर, पेलोड और समाप्ति का निरीक्षण करने के लिए एक डिकोडर का उपयोग करें - और समझें कि डिकोडिंग सत्यापित क्यों नहीं हो रही है, अधिकांश 401 के पीछे दावे की जांच होती है।

5 मिनट पढ़ें

URL एन्कोडिंग: कब बचना है, और कब आप चीज़ों को तोड़ रहे हैं

URL एनकोड और डीकोड सही ढंग से - आरक्षित वर्ण, प्लस बनाम %20, एनकोडयूआरआई बनाम एनकोडयूआरआईकंपोनेंट, और टूटे हुए लिंक के पीछे डबल-एन्कोडिंग बग।

5 मिनट पढ़ें

लाने के लिए कर्ल: अनुरोध को टर्मिनल से ब्राउज़र तक ले जाना

जावास्क्रिप्ट के लिए रूपांतरण लाने के लिए कर्ल: हेडर, बॉडी, ऑथ और तरीकों को सही ढंग से मैप किया गया, साथ ही सीओआरएस वास्तविकता जो यह तय करती है कि अनुरोध काम करता है या नहीं।

सभी 19 पोस्ट →