टेक्स्ट और फ़ाइलों को Base64 में एनकोड करें

टेक्स्ट, रॉ बाइट या किसी भी फ़ाइल को Base64 में बदलें। वह कैरेक्टर सेट चुनें जिसकी प्राप्तकर्ता अपेक्षा करता है, = पैडिंग रखें या हटाएँ, और MIME व PEM के लिए लाइनों को 76 या 64 अक्षरों पर रैप करें।

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

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

  1. एनकोड करने के लिए टेक्स्ट टाइप या पेस्ट करें, रॉ बाइट एनकोड करने के लिए इनपुट को “हेक्स” पर करें, या फ़ाइल एनकोड करने के लिए “फ़ाइल खोलें” पर क्लिक करें।
  2. “टेक्स्ट एनकोडिंग” को UTF-8 पर ही रहने दें, जब तक कि प्राप्त करने वाला सिस्टम कोई दूसरा कैरेक्टर सेट न माँगे।
  3. विकल्प सेट करें: ज़्यादातर कामों के लिए “मानक” वेरिएंट रखें, अगर प्राप्तकर्ता को पैडिंग नहीं चाहिए तो “पैडिंग” बंद करें, और ज़रूरत होने पर “लाइन रैप” से लाइनों को 76 (MIME) या 64 (PEM) अक्षरों पर तोड़ें।
  4. Base64 आउटपुट को कॉपी करें या फ़ाइल के रूप में डाउनलोड करें।

Base64 एनकोडिंग कैसे काम करती है

एनकोडर इनपुट को एक बार में तीन बाइट पढ़ता है। ये 24 बिट 6-6 बिट के चार समूहों में बाँटे जाते हैं, और हर 6-बिट मान (0 से 63) एक अक्षर चुनता है: 0 से 25 के लिए A-Z, 26 से 51 के लिए a-z, 52 से 61 के लिए 0-9, फिर + और /। अंदर तीन बाइट जाते हैं और बाहर चार अक्षर आते हैं, इसीलिए Base64 मूल डेटा से लगभग 33% बड़ा होता है।

Text     M        a        n
Bytes    77       97       110
Bits     01001101 01100001 01101110
6-bit    010011 010110 000101 101110
Index    19     22     5      46
Base64   T      W      F      u

पैडिंग और आउटपुट की लंबाई

जब इनपुट की लंबाई तीन का गुणज नहीं होती, तो आख़िरी समूह अधूरा रह जाता है। एक बचा हुआ बाइट दो अक्षर बनता है, जिनके बाद == आता है; दो बचे हुए बाइट तीन अक्षर और एक = बनते हैं। इसलिए n इनपुट बाइट के लिए पैडिंग वाला आउटपुट हमेशा 4 × ceil(n / 3) अक्षर लंबा होता है।

पैडिंग में कोई डेटा नहीं होता। JSON Web Token, URL पैरामीटर और कई API इसे छोड़ देते हैं, इसलिए जब प्राप्त करने वाला पक्ष बिना पैडिंग का आउटपुट चाहता हो, तो पैडिंग बंद कर दें। लिंक और फ़ाइल नामों के लिए URL-सुरक्षित वेरिएंट चुनें या Base64URL पेज का उपयोग करें; दोनों ही + और / को - और _ से बदल देते हैं।

MIME और PEM के लिए लाइन रैपिंग

डिफ़ॉल्ट रूप से आउटपुट एक लंबी लाइन होता है, और JSON, data URI तथा HTTP हेडर को यही चाहिए। दो फ़ॉर्मैट लाइन ब्रेक की अपेक्षा करते हैं:

  • MIME, 76 अक्षर। Content-Transfer-Encoding: base64 के साथ भेजे गए ईमेल अटैचमेंट में कोई भी लाइन 76 अक्षरों से लंबी नहीं होनी चाहिए (RFC 2045)। यह विकल्प लाइनों को CRLF से समाप्त करता है, जैसा कि MIME में ज़रूरी है।
  • PEM, 64 अक्षर। -----BEGIN और -----END लाइनों के बीच रखे सर्टिफ़िकेट और कुंजियाँ 64 अक्षरों की लाइनों का उपयोग करते हैं (RFC 7468)। यह विकल्प LF लाइन एंडिंग का उपयोग करता है।

कैरेक्टर सेट और फ़ाइलें

Base64 अक्षरों को नहीं, बाइट को एनकोड करता है, इसलिए टेक्स्ट को पहले किसी कैरेक्टर सेट की मदद से बाइट में बदला जाता है। अक्षर é UTF-8 में दो बाइट का होता है, लेकिन ISO-8859-1 या Windows-1252 में केवल एक बाइट का, इसलिए एक ही टेक्स्ट से अलग-अलग Base64 बनता है। वेब, JSON और लगभग हर आधुनिक API के लिए UTF-8 ही सही है; GBK, Shift_JIS, Windows-1251 या कोई अन्य कैरेक्टर सेट केवल तभी चुनें जब किसी पुराने सिस्टम से मेल बैठाना हो।

फ़ाइलें बिना किसी कैरेक्टर सेट रूपांतरण के, ठीक वैसे ही एनकोड होती हैं जैसे वे सहेजी गई हैं। तैयार HTML और CSS स्निपेट वाली इमेज के लिए इमेज से Base64 देखें; पहचाने गए MIME टाइप वाले data URI के लिए फ़ाइल से Base64 का उपयोग करें।

तकनीकी विवरण

वर्णमालाA-Z a-z 0-9 + /
आउटपुट का आकारहर 3 बाइट पर 4 अक्षर (लगभग 133%)
पैडिंग= से 4 अक्षरों के गुणज तक
मानकRFC 4648 खंड 4
केस-संवेदीहाँ

उदाहरण

इनपुट (UTF-8)आउटपुट
Hello, World!SGVsbG8sIFdvcmxkIQ==
Base64.isQmFzZTY0Lmlz
你好5L2g5aW9

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

मेरा Base64 आउटपुट किसी दूसरे एनकोडर से अलग क्यों है?
लगभग हमेशा इसलिए कि इनपुट बाइट अलग होते हैं। आम कारण हैं: अंत में एक अतिरिक्त न्यूलाइन (शेल कमांड echo एक न्यूलाइन जोड़ देता है; इसके बजाय printf '%s' या echo -n का उपयोग करें), अलग कैरेक्टर सेट, टेक्स्ट में Windows लाइन एंडिंग, या पैडिंग, वर्णमाला या लाइन रैप की अलग सेटिंग। समान विकल्पों के साथ समान बाइट हमेशा एक जैसा आउटपुट देते हैं।
JavaScript में यूनिकोड टेक्स्ट को Base64 में कैसे एनकोड करें?
btoa() केवल U+00FF तक के अक्षर स्वीकार करता है और बाकी किसी भी अक्षर पर त्रुटि देता है। पहले स्ट्रिंग को UTF-8 बाइट में बदलें, उदाहरण के लिए btoa(String.fromCharCode(...new TextEncoder().encode(str)))। Node.js में Buffer.from(str, 'utf8').toString('base64') का उपयोग करें।
कमांड लाइन पर Base64 एनकोड कैसे करें?
Linux या macOS पर printf '%s' 'your text' | base64 चलाएँ। GNU base64 डिफ़ॉल्ट रूप से आउटपुट को 76 अक्षरों पर रैप करता है (एक ही लाइन के लिए -w 0 जोड़ें), और openssl base64 64 अक्षरों पर रैप करता है (एक लाइन के लिए -A जोड़ें)।
क्या Base64 एनकोडिंग एक तरह का एन्क्रिप्शन है?
नहीं। Base64 में कोई कुंजी नहीं होती और कोई भी Base64 डिकोडर से इसे वापस बदल सकता है। इसका मकसद बाइनरी डेटा को उन चैनलों से भेजना है जो केवल टेक्स्ट स्वीकार करते हैं, जानकारी छिपाना नहीं।
Base64 मेरे डेटा को कितना बड़ा कर देता है?

हर 3 बाइट 4 अक्षर बन जाते हैं, और आख़िरी समूह को पूरा किया जाता है, इसलिए आउटपुट लगभग 33% बड़ा होता है। MIME लाइन रैपिंग हर 76 अक्षरों पर दो और बाइट (CRLF) जोड़ती है।