ബേസ്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 का व्यापक उपयोग होता है, कुछ स्थितियों में अधिक उपयुक्त विकल्प हो सकते हैं:
-
URL-सुरक्षित Base64: एक भिन्नता जो "+" और "/" के बजाय "-" और "_" का उपयोग करती है ताकि URL एन्कोडिंग समस्याओं से बचा जा सके। यह डेटा के लिए उपयोगी है जिसे यूआरएल में शामिल किया जाएगा।
-
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 (2^6), जो बाइनरी और Base64 के बीच रूपांतरण को कुशल बनाता है।
समय के साथ, Base64 के कई भिन्नताएँ उभरी हैं:
- मानक Base64: RFC 4648 में परिभाषित, A-Z, a-z, 0-9, +, / और = पैडिंग का उपयोग करता है
- URL-सुरक्षित Base64: "+" और "/" के बजाय "-" और "_" का उपयोग करता है ताकि URL एन्कोडिंग समस्याओं से बचा जा सके
- फाइलनाम-सुरक्षित Base64: URL-सुरक्षित के समान, फाइल नामों में उपयोग के लिए डिज़ाइन किया गया
- IMAP के लिए संशोधित Base64: IMAP प्रोटोकॉल में विशेष वर्णों के एक अलग सेट के साथ उपयोग किया जाता है
तीन दशकों से अधिक समय के बावजूद, Base64 आधुनिक कंप्यूटिंग में एक मौलिक उपकरण बना हुआ है, विशेष रूप से वेब अनुप्रयोगों और APIs के उदय के साथ जो 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); // SGVsbG8sIFdvcmxkIQ==
try {
const decoded = decodeFromBase64(encoded);
console.log("डिकोडेड:", decoded); // Hello, World!
} catch (error) {
console.error(error.message);
}
किनारे के मामले और विचार
Base64 एन्कोडिंग और डिकोडिंग के साथ काम करते समय, इन महत्वपूर्ण विचारों से अवगत रहें:
-
यूनीकोड और गैर-ASCII वर्ण: जब गैर-ASCII वर्णों के साथ टेक्स्ट एन्कोड करते हैं, तो Base64 एन्कोडिंग से पहले उचित वर्ण एन्कोडिंग (आमतौर पर UTF-8) सुनिश्चित करें।
-
पैडिंग: मानक Base64 आउटपुट लंबाई को 4 के गुणांक में सुनिश्चित करने के लिए "=" वर्णों के साथ पैडिंग का उपयोग करता है। कुछ कार्यान्वयन पैडिंग को छोड़ने की अनुमति देते हैं, जो संगतता समस्याओं का कारण बन सकता है।
-
लाइन ब्रेक: पारंपरिक Base64 कार्यान्वयन पठनीयता के लिए लाइन ब्रेक डालते हैं (आमतौर पर हर 76 वर्ण), लेकिन आधुनिक अनुप्रयोग अक्सर इन्हें छोड़ देते हैं।
-
यूआरएल-सुरक्षित Base64: मानक Base64 "+" और "/" वर्णों का उपयोग करता है जिनका यूआरएल में विशेष अर्थ होता है। यूआरएल संदर्भों के लिए, यूआरएल-सुरक्षित Base64 का उपयोग करें जो इनका स्थान "-" और "_" से लेता है।
-
स्पेस: डिकोड करते समय, कुछ कार्यान्वयन उदार होते हैं और स्पेस को अनदेखा करते हैं, जबकि अन्य सटीक इनपुट की आवश्यकता होती है।
-
आकार वृद्धि: Base64 एन्कोडिंग डेटा के आकार को लगभग 33% बढ़ा देती है (3 इनपुट बाइट्स के लिए 4 आउटपुट बाइट्स)।
-
प्रदर्शन: Base64 एन्कोडिंग/डिकोडिंग बहुत बड़े डेटा के लिए गणनात्मक रूप से गहन हो सकती है। बड़े फ़ाइलों के लिए स्ट्रीमिंग दृष्टिकोण पर विचार करें।