Base64 एन्कोडिंग संपूर्ण गाइड: सिद्धांत से उपयोग तक
Base64 एन्कोडिंग की कार्यप्रणाली और वेब डेवलपमेंट में व्यावहारिक उपयोग के तरीके जानें।

Base64 क्यों बनाया गया?
Base64 की उत्पत्ति समझने के लिए 1970 के दशक के ईमेल सिस्टम पर जाना होगा। उस समय का ईमेल प्रोटोकॉल SMTP केवल 7-बिट ASCII कैरेक्टर ट्रांसमिट कर सकता था। केवल अंग्रेजी अक्षर, अंक और बुनियादी चिह्न सपोर्टेड थे, इमेज या डॉक्यूमेंट जैसी बाइनरी फाइल तो दूर, हिंदी जैसे मल्टीबाइट कैरेक्टर भी नहीं भेजे जा सकते थे।
इस समस्या को हल करने के लिए MIME (Multipurpose Internet Mail Extensions) मानक विकसित हुआ, और इसकी मुख्य तकनीकों में से एक Base64 है। Base64 किसी भी बाइनरी डेटा को सुरक्षित ASCII स्ट्रिंग में बदल देता है, जिससे केवल टेक्स्ट प्रोसेस करने वाले सिस्टम में भी फाइल भेजी जा सकती है।
आज भी Base64 व्यापक रूप से इस्तेमाल होता है। ईमेल अटैचमेंट, वेब पेज के इनलाइन इमेज, API ऑथेंटिकेशन, JWT टोकन आदि विभिन्न स्थानों पर मिलता है। वेब डेवलपर के लिए यह आवश्यक मूल ज्ञान है।
Base64 का मूल सिद्धांत: 64 सुरक्षित कैरेक्टर
Base64 नाम 64 कैरेक्टर के उपयोग से आया है। ये 64 कैरेक्टर दुनिया भर के लगभग सभी सिस्टम में सुरक्षित रूप से प्रोसेस हो सकें इसके लिए सावधानी से चुने गए:
A-Z (26) + a-z (26) + 0-9 (10) + + / (2) = 64 कैरेक्टर
और पैडिंग के लिए = कैरेक्टर अतिरिक्त उपयोग होता है। 64 क्यों? 64 = 2^6, इसलिए एक Base64 कैरेक्टर 6 बिट से व्यक्त होता है। कंप्यूटर की डेटा प्रोसेसिंग यूनिट बाइट (8 बिट) और 6 बिट के बीच का संबंध Base64 एल्गोरिदम की कुंजी है।
एन्कोडिंग प्रक्रिया: चरण दर चरण समझें
"Man" स्ट्रिंग के उदाहरण से देखें Base64 एन्कोडिंग कैसे काम करता है।
चरण 1: प्रत्येक कैरेक्टर को 8-बिट बाइनरी में बदलें
M → 77 → 01001101
a → 97 → 01100001
n → 110 → 01101110
चरण 2: 24 बिट को 6 बिट के 4 ग्रुप में विभाजित करें
24 बिट (3 बाइट) को 6 बिट में बांटने पर 4 ग्रुप बनते हैं। यही कारण है कि Base64 डेटा साइज लगभग 33% बढ़ाता है। 3 बाइट इनपुट 4 कैरेक्टर (4 बाइट) आउटपुट में बदलता है।
010011 | 010110 | 000101 | 101110
चरण 3: प्रत्येक 6 बिट को Base64 कैरेक्टर में बदलें
010011 → 19 → T
010110 → 22 → W
000101 → 5 → F
101110 → 46 → u
परिणाम: "Man" → "TWFu"
पैडिंग (=) की भूमिका
यदि इनपुट डेटा 3 बाइट का गुणक न हो तो क्या? तब पैडिंग कैरेक्टर = इस्तेमाल होता है।
उदाहरण के लिए केवल "M" (1 बाइट) एन्कोड करने पर:
- 8 बिट को 6 बिट में बांटने पर 2 बिट बचते हैं
- 4 बिट के 0 जोड़कर 2 Base64 कैरेक्टर बनते हैं
- बाकी 2 जगह
=से भरी जाती हैं
"M" → "TQ=="
"Ma" → "TWE="
"Man" → "TWFu"
पैडिंग डिकोडिंग में मूल डेटा की सटीक लंबाई जानने में मदद करती है। हालांकि URL में उपयोग करते समय पैडिंग छोड़ी भी जाती है।
वेब डेवलपमेंट में व्यावहारिक उपयोग
1. Data URI से इमेज इनलाइन करना
Data URI से इमेज को अलग फाइल के बिना सीधे HTML या CSS में शामिल किया जा सकता है।
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUg..." />
.icon {
background-image: url('data:image/svg+xml;base64,PHN2Zy...');
}
कब उपयोग करें:
- छोटे आइकन (1-2KB से कम)
- बार-बार उपयोग न होने वाली इमेज
- HTTP रिक्वेस्ट कम करने की आवश्यकता
कब बचें:
- बड़ी इमेज (33% साइज वृद्धि बोझ है)
- एक ही इमेज कई पेजों पर (कैशिंग संभव नहीं)
- बार-बार बदलने वाली इमेज
2. HTTP Basic ऑथेंटिकेशन
HTTP Basic ऑथेंटिकेशन सबसे सरल ऑथेंटिकेशन विधियों में से एक है। यूज़रनेम और पासवर्ड को कोलन से जोड़कर Base64 में एन्कोड किया जाता है।
const username = 'admin';
const password = 'secret123';
const credentials = btoa(`${username}:${password}`);
fetch('https://api.example.com/data', {
headers: {
'Authorization': `Basic ${credentials}`
}
});
सर्वर इस हेडर को डिकोड करके ऑथेंटिकेशन जानकारी निकालता है। लेकिन Base64 एन्क्रिप्शन नहीं है, इसलिए HTTPS के साथ इस्तेमाल करना अनिवार्य है। HTTP पर भेजने से कोई भी पासवर्ड देख सकता है।
3. JWT (JSON Web Token) संरचना
JWT तीन भागों से बना है, प्रत्येक Base64URL में एन्कोड होता है:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. // हेडर
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4ifQ. // पेलोड
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c // सिग्नेचर
JWT में Base64URL इस्तेमाल होने का कारण है कि टोकन URL के क्वेरी पैरामीटर में भेजा जा सकता है। स्टैंडर्ड Base64 के + और / URL में विशेष अर्थ रखते हैं, इसलिए सुरक्षित कैरेक्टर से बदले जाते हैं।
4. फाइल अपलोड
Ajax से फाइल अपलोड करते समय FormData के बजाय Base64 स्ट्रिंग के रूप में भेजने का तरीका भी है:
const fileInput = document.querySelector('input[type="file"]');
const file = fileInput.files[0];
const reader = new FileReader();
reader.onload = function(e) {
const base64 = e.target.result;
// सर्वर पर भेजें
fetch('/upload', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ file: base64 })
});
};
reader.readAsDataURL(file);
यह विधि JSON API के साथ उपयोग में सुविधाजनक है, लेकिन फाइल साइज 33% बढ़ने से बड़ी फाइलों के लिए उपयुक्त नहीं।
प्रोग्रामिंग भाषाओं में उपयोग
JavaScript (ब्राउज़र)
// एन्कोडिंग
const encoded = btoa('Hello World'); // "SGVsbG8gV29ybGQ="
// डिकोडिंग
const decoded = atob('SGVsbG8gV29ybGQ='); // "Hello World"
ध्यान दें: btoa() और atob() केवल लैटिन कैरेक्टर सपोर्ट करते हैं। हिंदी या इमोजी प्रोसेस करने के लिए:
// UTF-8 एन्कोडिंग
function encodeUnicode(str) {
return btoa(encodeURIComponent(str).replace(
/%([0-9A-F]{2})/g,
(_, p1) => String.fromCharCode('0x' + p1)
));
}
// UTF-8 डिकोडिंग
function decodeUnicode(str) {
return decodeURIComponent(
atob(str).split('').map(c =>
'%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2)
).join('')
);
}
Node.js
// एन्कोडिंग
const encoded = Buffer.from('Hello World').toString('base64');
// डिकोडिंग
const decoded = Buffer.from(encoded, 'base64').toString('utf-8');
Python
import base64
# एन्कोडिंग
encoded = base64.b64encode(b'Hello World').decode('utf-8')
# डिकोडिंग
decoded = base64.b64decode('SGVsbG8gV29ybGQ=').decode('utf-8')
# URL-safe Base64
url_safe = base64.urlsafe_b64encode(b'data').decode('utf-8')
Base64 vs Base64URL तुलना
| विशेषता | Base64 | Base64URL |
|---|---|---|
+ कैरेक्टर | + | - (हाइफन) |
/ कैरेक्टर | / | _ (अंडरस्कोर) |
पैडिंग = | आवश्यक | वैकल्पिक (छोड़ा जा सकता है) |
| मुख्य उपयोग | ईमेल, सामान्य डेटा | URL, फाइलनेम, JWT |
URL में + स्पेस के रूप में और / पाथ सेपरेटर के रूप में समझा जा सकता है। Base64URL इन समस्याओं से बचाता है।
आम गलतियां और सावधानियां
1. Base64 को एन्क्रिप्शन समझना Base64 एन्कोडिंग है, एन्क्रिप्शन नहीं। कोई भी आसानी से डिकोड कर सकता है इसलिए संवेदनशील जानकारी छिपाने के लिए इस्तेमाल नहीं करें। सुरक्षा आवश्यक हो तो AES जैसे वास्तविक एन्क्रिप्शन एल्गोरिदम उपयोग करें।
2. बड़ी फाइल पर Data URI उपयोग Data URI कैश नहीं होती। 100KB इमेज Base64 में 133KB बन जाती है, और हर पेज लोड पर बार-बार डाउनलोड होती है। बाहरी फाइल से ब्राउज़र कैश का लाभ मिलता है।
3. न्यूलाइन कैरेक्टर अनदेखा करना कुछ Base64 इम्प्लीमेंटेशन हर 76 कैरेक्टर पर न्यूलाइन डालते हैं (MIME स्टैंडर्ड)। डिकोडिंग से पहले न्यूलाइन हटाए बिना एरर हो सकती है।
4. कैरेक्टर एन्कोडिंग अनदेखा करना
btoa() से सीधे हिंदी एन्कोड करने पर एरर होती है। पहले UTF-8 में कन्वर्ट करना होगा।
Toolypet Base64 टूल उपयोग
Toolypet का Base64 एन्कोडर/डिकोडर डेवलपर के वर्कफ्लो को सरल बनाता है:
- टेक्स्ट कन्वर्जन: सामान्य टेक्स्ट को Base64 में या उल्टा तुरंत कन्वर्ट करें
- फाइल कन्वर्जन: इमेज या डॉक्यूमेंट को ड्रैग एंड ड्रॉप से Base64 में बदलें
- Data URI जेनरेशन: उचित MIME टाइप सहित Data URI ऑटो-जेनरेट
- UTF-8 ऑटो हैंडलिंग: हिंदी, इमोजी आदि यूनिकोड कैरेक्टर पूर्ण सपोर्ट
डेवलपमेंट में Base64 कन्वर्जन की जरूरत हो तो अलग लाइब्रेरी इंस्टॉल या कोड लिखे बिना ब्राउज़र में सीधे उपयोग करें।