सीधे कंटेंट पर जाएं

Base64 में एन्कोड करें

टेक्स्ट, इमेज या कोई भी फ़ाइल — सही तरीक़े से Base64 में बदली हुई। ऐक्सेंट वाले अक्षर और इमोजी सुरक्षित रहते हैं, जो आम एक-लाइन वाले तरीक़ों से नहीं हो पाता। कुछ भी स्टोर नहीं किया जाता।

  • कभी स्टोर नहीं होती
  • न कतार, न इंतज़ार
  • साइनअप नहीं, वॉटरमार्क नहीं

टेक्स्ट UTF-8 के रूप में एन्कोड होता है, इसलिए ऐक्सेंट और इमोजी सुरक्षित रहते हैं।

Base64

Base64 यहां दिखेगा।

यह कैसे काम करता है

1

टेक्स्ट पेस्ट करें या फ़ाइल छोड़ें

टेक्स्ट UTF-8 के रूप में एन्कोड होता है। फ़ाइल बाइट-दर-बाइट एन्कोड होती है, और कभी स्टोर नहीं होती।

2

प्रकार चुनें

स्टैंडर्ड Base64, टोकन और query string के लिए URL-safe Base64URL, या CSS या <img> टैग में पेस्ट करने के लिए तैयार पूरा data URI।

3

कॉपी करें

नतीजा कॉपी करें, या बड़ा हो तो उसे टेक्स्ट फ़ाइल के रूप में डाउनलोड करें।

यह ठीक एक-तिहाई क्यों बढ़ता है

Base64 एक बार में तीन बाइट लेकर उन्हें चार कैरेक्टर के रूप में लिखता है, और हर कैरेक्टर चौबीस में से छह बिट ढोता है। चार भाग तीन — मशहूर 33 प्रतिशत यहीं से आता है। यह गणित है, अक्षमता नहीं, और प्रिंट होने वाले कैरेक्टर के दायरे में रहते हुए कोई भी एन्कोडर इससे बेहतर नहीं कर सकता। जब डेटा तीन-तीन के समूहों में पूरा नहीं बंटता, तो आख़िरी समूह में पैडिंग जोड़कर एक या दो = चिह्न लगाए जाते हैं, इसीलिए किसी भी base64 स्ट्रिंग की लंबाई हमेशा चार की गुणज होती है।

दो अक्षर-सेट हैं, और ग़लत वाला चुनना वह सबसे आम समस्या है जिसे लेकर लोग यहां आते हैं। स्टैंडर्ड अक्षर-सेट के आख़िर में + और / होते हैं, और URL में दोनों का मतलब होता है — query string में प्लस स्पेस बन जाता है और स्लैश पाथ सेपरेटर जैसा दिखता है। URL-safe वैरिएंट इनकी जगह - और _ इस्तेमाल करता है, और JSON Web Token, फ़ाइलनाम और किसी पते में आने वाली हर चीज़ यही इस्तेमाल करती है। बाक़ी सब में ये एक जैसे हैं, और एक से एन्कोड करके दूसरे से डिकोड की गई वैल्यू ऐसे फ़ेल होती है जैसे डेटा ख़राब हो गया हो।

लाइन रैपिंग दूसरी चीज़ है जो संदर्भ पर निर्भर करती है। ईमेल अटैचमेंट 76 कैरेक्टर की लाइनें चाहते हैं, PEM सर्टिफ़िकेट और की 64 की, और data URI या JSON फ़ील्ड में कोई ब्रेक नहीं होना चाहिए। यहां यह डिफ़ॉल्ट रूप से बंद है, क्योंकि आजकल बिना रैप वाला ही आम मामला है; जब मंज़िल कोई ईमेल हेडर या -----BEGIN----- ब्लॉक हो, तब इसे चालू करें, क्योंकि वह एक लंबी-सी लाइन को ठुकरा देगा।

Base64 एन्क्रिप्शन नहीं है और कोई भी सुरक्षा नहीं देता। यह सिर्फ़ अक्षर-सेट बदलना है — कोई भी इसे तुरंत उलट सकता है, और हर सिक्योरिटी स्कैनर यह अपने-आप कर लेता है। इसका मक़सद बाइनरी डेटा को उन रास्तों से ले जाना है जो सिर्फ़ टेक्स्ट स्वीकार करते हैं: ईमेल बॉडी, JSON फ़ील्ड, XML डॉक्यूमेंट, स्टाइलशीट में data URI। कॉन्फ़िगरेशन में पासवर्ड छिपाने के लिए इसका इस्तेमाल देखने वाले किसी से भी कुछ नहीं छिपाता।

जब आपको कुछ और चाहिए

कमांड लाइन पर Linux में base64 -w 0 file.bin बिना रैप किए एन्कोड करता है और macOS पर सादा base64 यही करता है, जबकि openssl base64 -A हर जगह एक जैसा काम करता है। URL-safe अक्षर-सेट के लिए basenc --base64url बिना किसी अदला-बदली के सही नतीजा देता है।

बड़ी फ़ाइलों के लिए यहां का पूरा तरीक़ा ही ग़लत है — पूरी फ़ाइल मेमोरी में रखी जाती है, और एन्कोडिंग कुछ और होने से पहले ही उसे एक-तिहाई बढ़ा देती है। कमांड-लाइन टूल इसकी जगह स्ट्रीम करते हैं, और कोड में हर भाषा में इंक्रीमेंटल एन्कोडर होता है। यह भी पूछने लायक है कि base64 की ज़रूरत है भी या नहीं: बाइनरी को multipart/form-data या raw body के रूप में भेजने से मेमोरी और 33 प्रतिशत, दोनों से बचा जा सकता है।

अक्सर पूछे जाने वाले सवाल

क्या मेरा टेक्स्ट या फ़ाइल कहीं स्टोर होती है?

नहीं। कुछ भी स्टोर नहीं होता, कुछ भी लॉग नहीं होता, और कोई सर्वर इसे कभी नहीं देखता — और नेटवर्क डिस्कनेक्ट होने पर भी यह काम करता रहता है। ख़ास तौर पर इन टूल्स के लिए यह कोई छोटी-मोटी ख़ूबी नहीं है। लोग ऑनलाइन एन्कोडर और डिकोडर में जो पेस्ट करते हैं, वह अक्सर चालू होता है: सेशन टोकन, API की, Authorization हेडर, ग्राहकों के रिकॉर्ड। इनमें से कुछ भी ऐसे पेज में पेस्ट करना जो उसे कहीं भेजता है, उसे उजागर करना है, चाहे साइट डिलीट करने के बारे में कुछ भी वादा करे।

यहां ऐक्सेंट वाले अक्षर और इमोजी क्यों काम करते हैं?

क्योंकि एन्कोड करने से पहले टेक्स्ट को UTF-8 बाइट में बदला जाता है — यही सही क्रम है, और ज़्यादातर जल्दबाज़ी वाले तरीक़े इसे छोड़ देते हैं। ब्राउज़र का अपना `btoa` टेक्स्ट ले ही नहीं सकता — यह हर कैरेक्टर को एक बाइट मानता है, इसलिए `btoa("café")` सीधे एरर दे देता है। आम जुगाड़, `btoa(unescape(encodeURIComponent(s)))`, संयोग से काम करता है और इमोजी व बेसिक दायरे से बाहर के दूसरे कैरेक्टर पर बिखर जाता है। यह पेज UTF-8 को एक बार, सही तरीक़े से एन्कोड करता है, इसलिए 日本語 और 🎉 सही आते हैं और डिकोड होकर बिल्कुल वैसे ही लौटते हैं।

Base64URL क्या है और मुझे इसकी ज़रूरत कब है?

यह Base64 ही है, जिसमें दो कैरेक्टर बदले गए हैं: + की जगह -, / की जगह _, और आख़िर की = पैडिंग हटा दी जाती है। यह इसलिए है क्योंकि URL में +, / और = तीनों का कोई मतलब होता है, इसलिए query string या पाथ में जाने पर सामान्य Base64 बिगड़ जाता है। JWT, OAuth टोकन और URL में जाने वाली हर चीज़ Base64URL इस्तेमाल करती है। अगर आप नतीजा किसी लिंक में डाल रहे हैं, तो इसे चुनें।

क्या Base64 कुछ एन्क्रिप्ट करता है या सुरक्षा देता है?

नहीं, और यह बात साफ़-साफ़ कहनी ज़रूरी है। Base64 एन्कोडिंग है, एन्क्रिप्शन नहीं — इसमें न कोई की है, न कोई सीक्रेट। जो भी यह स्ट्रिंग देखता है, वह इसे एक क़दम में डिकोड कर सकता है, इसी साइट पर भी। यह बाइनरी डेटा को उन रास्तों से सुरक्षित ले जाने के लिए है जो सिर्फ़ टेक्स्ट स्वीकार करते हैं, जैसे ईमेल अटैचमेंट और data URI। अगर किसी चीज़ को गुप्त रखना है, तो उसे एन्क्रिप्शन चाहिए; Base64 कोई भी सुरक्षा नहीं देता।

Base64 मेरी फ़ाइल से बड़ा क्यों है?

लगभग 33% बड़ा, हमेशा। Base64 हर 3 बाइट को 4 टेक्स्ट कैरेक्टर में दिखाता है, इसलिए साइज़ डिज़ाइन के तहत ही एक-तिहाई बढ़ता है, साथ में थोड़ी पैडिंग। बाइनरी को टेक्स्ट में बदलने की यही क़ीमत है, और इसीलिए बड़ी इमेज को अपनी CSS में data URI के रूप में डालना आमतौर पर घाटे का सौदा है।

क्या मैं इमेज को data URI के रूप में एन्कोड कर सकता हूं?

हां — इमेज छोड़ें और Data URI चुनें। आपको सही मीडिया टाइप पहले से भरी हुई पूरी `data:image/png;base64,…` स्ट्रिंग मिलती है, जो स्टाइलशीट, <img> टैग या ईमेल टेम्पलेट में पेस्ट करने के लिए तैयार है।

क्या कोई साइज़ लिमिट है?

उपलब्ध मेमोरी, कोई तय साइज़ सीमा नहीं, और यह काफ़ी बड़ी है — कई मेगाबाइट की फ़ाइलें आराम से एन्कोड होती हैं। बड़ी फ़ाइलों को संभालने के लिए ही एन्कोडिंग टुकड़ों में की जाती है; सीधा-सादा तरीक़ा लगभग 125 KB पर “Maximum call stack size exceeded” के साथ क्रैश हो जाता है, जो बहुत सारे ऑनलाइन एन्कोडर का बग है।

ध्यान दें: Base64 डेटा को लगभग 33% बड़ा कर देता है — यह फ़ॉर्मैट की बनावट है, कोई ख़राबी नहीं। फ़ाइलें पूरी की पूरी मेमोरी में पढ़ी जाती हैं, इसलिए बहुत बड़ी फ़ाइल काम पूरा होने से पहले फ़ोन के टैब की मेमोरी ख़त्म कर सकती है। लाइन रैपिंग डिफ़ॉल्ट रूप से बंद है; ईमेल और PEM फ़ॉर्मैट में इसे चालू होना चाहिए।

यह टूल अपनी वेबसाइट पर लगाएं

किसी भी ब्लॉग, क्लास पेज या हेल्प आर्टिकल के लिए मुफ़्त। एक स्निपेट पेस्ट करें और आपके विज़िटर इसे सीधे आपके पेज पर इस्तेमाल कर सकेंगे।