बेस64 एन्कोडर/डिकोडर
टेक्स्ट को बेस64 एन्कोडिंग में और उससे परिवर्तित करें
Base64 एन्कोडर और डिकोडर
परिचय
Base64 एक बाइनरी-से-टेक्स्ट एन्कोडिंग योजना है जो बाइनरी डेटा को ASCII स्ट्रिंग प्रारूप में प्रस्तुत करती है। इसे उन चैनलों के माध्यम से डेटा ले जाने के लिए डिज़ाइन किया गया है जो केवल विश्वसनीय रूप से टेक्स्ट सामग्री का समर्थन करते हैं। Base64 एन्कोडिंग बाइनरी डेटा को 64 वर्णों के सेट में परिवर्तित करती है (इसलिए नाम) जिन्हें टेक्स्ट-आधारित प्रोटोकॉल के माध्यम से सुरक्षित रूप से प्रसारित किया जा सकता है बिना डेटा भ्रष्टता के।
Base64 वर्ण सेट में शामिल हैं:
- बड़े अक्षर A-Z (26 वर्ण)
- छोटे अक्षर a-z (26 वर्ण)
- अंक 0-9 (10 वर्ण)
- दो अतिरिक्त वर्ण, आमतौर पर "+" और "/" (2 वर्ण)
यह उपकरण आपको टेक्स्ट को Base64 प्रारूप में आसानी से एन्कोड करने या Base64 स्ट्रिंग्स को उनके मूल टेक्स्ट में वापस डिकोड करने की अनुमति देता है। यह विशेष रूप से डेवलपर्स, आईटी पेशेवरों और किसी भी व्यक्ति के लिए उपयोगी है जो डेटा के साथ काम कर रहा है जिसे टेक्स्ट-आधारित चैनलों के माध्यम से सुरक्षित रूप से प्रसारित करने की आवश्यकता है।
Base64 एन्कोडिंग कैसे काम करती है
एन्कोडिंग प्रक्रिया
Base64 एन्कोडिंग प्रत्येक तीन बाइट्स (24 बिट्स) के बाइनरी डेटा के समूह को चार Base64 वर्णों में परिवर्तित करके काम करती है। प्रक्रिया निम्नलिखित चरणों का पालन करती है:
- इनपुट टेक्स्ट को इसके बाइनरी प्रतिनिधित्व में परिवर्तित करें (ASCII या UTF-8 एन्कोडिंग का उपयोग करके)
- बाइनरी डेटा को 24 बिट्स (3 बाइट्स) के समूहों में समूहित करें
- प्रत्येक 24-बिट समूह को चार 6-बिट समूहों में विभाजित करें
- प्रत्येक 6-बिट समूह को इसके संबंधित Base64 वर्ण में परिवर्तित करें
जब इनपुट लंबाई 3 से विभाज्य नहीं होती है, तो 4:3 के आउटपुट से इनपुट लंबाई के अनुपात को बनाए रखने के लिए "=" वर्णों के साथ पैडिंग जोड़ी जाती है।
गणितीय प्रतिनिधित्व
बाइट्स के अनुक्रम के लिए, संबंधित Base64 वर्ण की गणना इस प्रकार की जाती है:
जहां Base64 वर्णमाला में -वां वर्ण का प्रतिनिधित्व करता है।
डिकोडिंग प्रक्रिया
Base64 डिकोडिंग एन्कोडिंग प्रक्रिया को उलट देती है:
- प्रत्येक Base64 वर्ण को इसके 6-बिट मान में परिवर्तित करें
- इन 6-बिट मानों को संयोजित करें
- बिट्स को 8-बिट समूहों (बाइट्स) में समूहित करें
- प्रत्येक बाइट को इसके संबंधित वर्ण में परिवर्तित करें
पैडिंग
जब एन्कोड करने के लिए बाइट्स की संख्या 3 से विभाज्य नहीं होती है, तो पैडिंग लागू की जाती है:
- यदि एक बाइट शेष है, तो इसे दो Base64 वर्णों में परिवर्तित किया जाता है और "==" के साथ समाप्त किया जाता है
- यदि दो बाइट्स शेष हैं, तो उन्हें तीन Base64 वर्णों में परिवर्तित किया जाता है और "=" के साथ समाप्त किया जाता है
उदाहरण
आइए टेक्स्ट "Hello" को Base64 में एन्कोड करें:
- "Hello" का ASCII प्रतिनिधित्व: 72 101 108 108 111
- बाइनरी प्रतिनिधित्व: 01001000 01100101 01101100 01101100 01101111
- 6-बिट समूहों में समूहित करना: 010010 000110 010101 101100 011011 000110 1111
- अंतिम समूह में केवल 4 बिट्स हैं, इसलिए शून्य के साथ पैड किया जाता है: 010010 000110 010101 101100 011011 000110 111100
- दशमलव में परिवर्तित करना: 18, 6, 21, 44, 27, 6, 60
- Base64 वर्णमाला में देखना: S, G, V, s, b, G, 8
- परिणाम "SGVsbG8=" है
ध्यान दें कि अंत में "=" पैडिंग है क्योंकि इनपुट लंबाई (5 बाइट्स) 3 से विभाज्य नहीं है।
सूत्र
Base64 एन्कोडेड स्ट्रिंग की लंबाई की गणना के लिए सामान्य सूत्र है:
जहां छत फ़ंक्शन का प्रतिनिधित्व करता है (निकटतम पूर्णांक तक ऊपर की ओर गोल करना)।
उपयोग के मामले
Base64 एन्कोडिंग विभिन्न अनुप्रयोगों में व्यापक रूप से उपयोग की जाती है:
-
ईमेल अटैचमेंट्स: MIME (मल्टीपर्पज़ इंटरनेट मेल एक्सटेंशन्स) बाइनरी अटैचमेंट्स को ईमेल में एन्कोड करने के लिए Base64 का उपयोग करता है।
-
डेटा यूआरएल: HTML, CSS, या JavaScript में छोटे चित्रों, फ़ॉन्ट्स या अन्य संसाधनों को सीधे एम्बेड करना
data:
यूआरएल योजना का उपयोग करके। -
API संचार: JSON पेलोड या अन्य टेक्स्ट-आधारित API प्रारूपों में बाइनरी डेटा को सुरक्षित रूप से प्रसारित करना।
-
टेक्स्ट प्रारूपों में बाइनरी डेटा संग्रहीत करना: जब बाइनरी डेटा को XML, JSON, या अन्य टेक्स्ट-आधारित प्रारूपों में संग्रहीत करने की आवश्यकता होती है।
-
प्रमाणन प्रणाली: HTTP में बेसिक प्रमाणीकरण Base64 एन्कोडिंग का उपयोग करता है (हालांकि यह सुरक्षा के लिए नहीं है, केवल एन्कोडिंग के लिए)।
-
क्रिप्टोग्राफी: विभिन्न क्रिप्टोग्राफिक प्रोटोकॉल और प्रणालियों का हिस्सा, अक्सर कुंजी या प्रमाणपत्रों को एन्कोड करने के लिए।
-
कुकी मान: कुकीज़ में संग्रहीत करने के लिए जटिल डेटा संरचनाओं को एन्कोड करना।
विकल्प
हालांकि Base64 व्यापक रूप से उपयोग किया जाता है, कुछ स्थितियों में अधिक उपयुक्त विकल्प हो सकते हैं:
-
यूआरएल-सुरक्षित Base64: एक भिन्नता जो "+" और "/" के बजाय "-" और "_" का उपयोग करती है ताकि यूआरएल एन्कोडिंग समस्याओं से बचा जा सके। यूआरएल में शामिल डेटा के लिए उपयोगी।
-
Base32: 32-वर्ण सेट का उपयोग करता है, जिससे आउटपुट लंबा होता है लेकिन मानव पठनीयता और केस असंवेदनशीलता में बेहतर होता है।
-
हैक्स एन्कोडिंग: हेक्साडेसिमल में सरल रूपांतरण, जो कम प्रभावी है (आकार को दोगुना करता है) लेकिन बहुत सरल और व्यापक रूप से समर्थित है।
-
बाइनरी ट्रांसफर: बड़े फ़ाइलों के लिए या जब दक्षता महत्वपूर्ण हो, सीधे बाइनरी ट्रांसफर प्रोटोकॉल जैसे HTTP का उपयोग करना उचित है।
-
संपीड़न + Base64: बड़े टेक्स्ट डेटा के लिए, एन्कोडिंग से पहले संपीड़न आकार वृद्धि को कम कर सकता है।
-
JSON/XML सीरियलाइजेशन: संरचित डेटा के लिए, Base64 एन्कोडिंग के बजाय स्वदेशी JSON या XML सीरियलाइजेशन का उपयोग करना अधिक उपयुक्त हो सकता है।
इतिहास
Base64 एन्कोडिंग का मूल प्रारंभिक कंप्यूटिंग और दूरसंचार प्रणालियों में है जहां बाइनरी डेटा को टेक्स्ट के लिए डिज़ाइन किए गए चैनलों के माध्यम से प्रसारित करने की आवश्यकता थी।
Base64 का औपचारिक विनिर्देशन पहली बार 1987 में RFC 989 के रूप में प्रकाशित किया गया था, जिसने प्राइवेसी एनहांस्ड मेल (PEM) को परिभाषित किया। इसे बाद में RFC 1421 (1993) और RFC 2045 (1996, MIME के भाग के रूप में) में अपडेट किया गया।
"Base64" शब्द इस तथ्य से आता है कि एन्कोडिंग बाइनरी डेटा का प्रतिनिधित्व करने के लिए 64 विभिन्न ASCII वर्णों का उपयोग करती है। इन 64 वर्णों का चयन जानबूझकर किया गया था, क्योंकि 64 एक शक्ति है (2^6), जो बाइनरी और Base64 के बीच रूपांतरण को कुशल बनाता है।
समय के साथ, Base64 के कई भिन्नताएँ उभरी हैं:
- मानक Base64: RFC 4648 में परिभाषित, A-Z, a-z, 0-9, +, / और = पैडिंग का उपयोग करता है
- यूआरएल-सुरक्षित Base64: "+" और "/" के बजाय "-" और "_" का उपयोग करता है ताकि यूआरएल एन्कोडिंग समस्याओं से बचा जा सके
- फाइलनाम-सुरक्षित Base64: यूआरएल-सुरक्षित के समान, फाइलनामों में उपयोग के लिए डिज़ाइन किया गया
- IMAP के लिए संशोधित Base64: IMAP प्रोटोकॉल में उपयोग किया जाता है जिसमें विशेष वर्णों का एक अलग सेट होता है
तीन दशकों से अधिक समय के बावजूद, Base64 आधुनिक कंप्यूटिंग में एक मौलिक उपकरण बना हुआ है, विशेष रूप से वेब अनुप्रयोगों और एपीआई के उदय के साथ जो JSON जैसे टेक्स्ट-आधारित डेटा प्रारूपों पर भारी निर्भर करते हैं।
कोड उदाहरण
यहां विभिन्न प्रोग्रामिंग भाषाओं में Base64 एन्कोडिंग और डिकोडिंग के उदाहरण दिए गए हैं:
// JavaScript Base64 एन्कोडिंग/डिकोडिंग
function encodeToBase64(text) {
return btoa(text);
}
function decodeFromBase64(base64String) {
try {
return atob(base64String);
} catch (e) {
throw new Error("अवैध Base64 स्ट्रिंग");
}
}
// उदाहरण उपयोग
const originalText = "Hello, World!";
const encoded = encodeToBase64(originalText);
console.log("Encoded:", encoded); // SGVsbG8sIFdvcmxkIQ==
try {
const decoded = decodeFromBase64(encoded);
console.log("Decoded:", decoded); // Hello, World!
} catch (error) {
console.error(error.message);
}
किनारों के मामले और विचार
Base64 एन्कोडिंग और डिकोडिंग के साथ काम करते समय, इन महत्वपूर्ण विचारों से अवगत रहें:
-
यूनिकोड और गैर-ASCII वर्ण: जब गैर-ASCII वर्णों के साथ टेक्स्ट को एन्कोड करते हैं, तो Base64 एन्कोडिंग से पहले उचित वर्ण एन्कोडिंग (आमतौर पर UTF-8) सुनिश्चित करें।
-
पैडिंग: मानक Base64 आउटपुट लंबाई को 4 के गुणांक में सुनिश्चित करने के लिए "=" वर्णों के साथ पैडिंग का उपयोग करता है। कुछ कार्यान्वयन पैडिंग को छोड़ने की अनुमति देते हैं, जो संगतता समस्याओं का कारण बन सकता है।
-
लाइन ब्रेक: पारंपरिक Base64 कार्यान्वयन पठनीयता के लिए लाइन ब्रेक डालते हैं (आमतौर पर हर 76 वर्ण), लेकिन आधुनिक अनुप्रयोग अक्सर इन्हें छोड़ देते हैं।
-
यूआरएल-सुरक्षित Base64: मानक Base64 "+" और "/" वर्णों का उपयोग करता है जिनका यूआरएल में विशेष अर्थ होता है। यूआरएल संदर्भों के लिए, यूआरएल-सुरक्षित Base64 का उपयोग करें जो इनका "-" और "_" के साथ प्रतिस्थापन करता है।
-
Whitespace: डिकोडिंग के समय, कुछ कार्यान्वयन उदार होते हैं और whitespace को अनदेखा करते हैं, जबकि अन्य सटीक इनपुट की आवश्यकता होती है।
-
आकार वृद्धि: Base64 एन्कोडिंग डेटा के आकार को लगभग 33% बढ़ाती है (3 इनपुट बाइट्स के लिए 4 आउटपुट बाइट्स)।
-
प्रदर्शन: बहुत बड़े डेटा के लिए Base64 एन्कोडिंग/डिकोडिंग गणनात्मक रूप से महंगा हो सकता है। बड़े फ़ाइलों के लिए स्ट्रीमिंग दृष्टिकोण पर विचार करें।