Base64 एन्कोडिंग क्या है और इसका उपयोग कब करें

· 9 मिनट पढ़ने का समय

अगर आप API, ईमेल सिस्टम या वेब डेवलपमेंट के साथ काम करते हैं, तो आप Base64 से मिल चुके हैं, भले ही पहचान न पाए हों। ईमेल अटैचमेंट की शुरुआत, CSS में data: URL, या JWT टोकन का बीच का खंड में जो लंबे अक्षरों और संख्याओं की धाराएँ बेमतलब-सी लगती हैं? वह Base64 है। यह इंटरनेट की पाइपलाइन का सबसे पुराने और चुपचाप भार-वहन करने वाले टुकड़ों में से एक है, और जो भी सॉफ़्टवेयर आप उपयोग करते हैं, लगभग हर एक कहीं-न-कहीं इस पर टिका है।

Base64 का संक्षिप्त इतिहास

Base64 «radix-64» या «प्रिंट करने योग्य एन्कोडिंग» नामक एक परिवार का हिस्सा है, जिसका काम है मनमाने बाइट्स को केवल उन वर्णों के छोटे वर्णमाला से दर्शाना जिन्हें कोई पाठ-आधारित सिस्टम बिना बदले गुज़ारने की गारंटी देता है। सबसे पहले व्यापक रूप से उपयोग किया गया सदस्य uuencode है, जिसे Mary Ann Horton ने UC Berkeley में लगभग 1980 में लिखा था, ताकि उस ज़माने में जब Usenet और ईमेल 7-बिट ASCII से ऊपर की हर चीज़ बिगाड़ देते थे, बायनरी फ़ाइलें भेजी जा सकें।

Base64 की वर्णमाला स्वयं पहली बार RFC 989 (1987) में Privacy-Enhanced Mail (PEM) के लिए मानक की गई थी, जो हस्ताक्षरित और एन्क्रिप्ट किए ईमेल का एक शुरुआती प्रयास था। PEM समाप्त हो गया, पर इसकी एन्कोडिंग योजना बच गई और RFC 1421 (1993) तथा फिर MIME विशिष्टता (1993 में RFC 1521 और 1522, 1996 में संशोधित RFC 2045-2049) में मान्य कर दी गई। MIME ने Base64 को ईमेल से बायनरी फ़ाइल जोड़ने का डिफ़ॉल्ट तरीक़ा बना दिया, और वहाँ से एन्कोडिंग इंटरनेट के लगभग हर पाठ-केवल वहन माध्यम तक फैल गई।

2006 में, IETF ने बिखरी हुई Base64 परिभाषाओं को RFC 4648 में समेकित किया, जो Base64, Base32 और Base16 को एक ही दस्तावेज़ में परिभाषित करती है। RFC 4648 ने धारा 5 में URL-सुरक्षित संस्करण भी परिभाषित किया, जिसने URL के अनुकूल नहीं वाले दो वर्ण (+ और /) को - और _ से बदल दिया। JSON Web Token (RFC 7519, 2015) ने पैडिंग हटाए हुए URL-सुरक्षित Base64 पर मानकीकरण किया। आज, हर ईमेल अटैचमेंट, हर PEM-एन्कोडेड प्रमाणपत्र, हर data: URL, हर JWT, और हर multipart अपलोड सीमा Base64 पर निर्भर है।

Base64 कैसे काम करता है: गणित

Base64 तीन इनपुट बाइट (24 बिट) लेता है और उन्हें चार आउटपुट वर्ण (6 बिट प्रत्येक) के रूप में फिर से लिखता है, 64-प्रतीक वर्णमाला से। मैपिंग स्थिर है:

सूचकांक श्रेणीवर्ण
0-25A-Z
26-51a-z
52-610-9
62+ (मानक) या - (URL-सुरक्षित)
63/ (मानक) या _ (URL-सुरक्षित)

तो Hello बन जाता है:

आउटपुट हमेशा 4 वर्णों का गुणक होता है। यदि इनपुट लंबाई मॉड 3 = 1 है, तो आपको दो = पैडिंग वर्ण मिलते हैं; यदि 2 है तो एक; यदि 0 है तो कोई नहीं। पैडिंग कभी-कभी हटाई जाती है (विशेष रूप से JWT और URL टुकड़ों में) और डिकोडर्स से अपेक्षा है कि वे इसे सहन करें।

33 % आकार ओवरहेड इस 3-से-4 विस्तार से आता है: हर 3 इनपुट बाइट 4 आउटपुट वर्ण बन जाते हैं, एक-तिहाई की वृद्धि। वर्णमाला बदले बिना इसे कम करने का कोई तरीक़ा नहीं (Base85 / Ascii85 केवल 25 % विस्तार करता है, 85 प्रिंट करने योग्य वर्ण के साथ, अधिक जटिल एन्कोडर की क़ीमत पर)।

सामान्य उपयोग के मामले

ईमेल अटैचमेंट। SMTP, जो प्रोटोकॉल सर्वरों के बीच 95 % ईमेल वहन करता है, 1982 (RFC 821) में 7-बिट ASCII के लिए डिज़ाइन किया गया था। आप जो भी बायनरी अटैचमेंट भेजते हैं (एक छवि, एक PDF, एक ZIP) उसे आपके मेल क्लाइंट संचरण से पहले Base64 में एन्कोड करते हैं और प्राप्तकर्ता के क्लाइंट डिकोड करते हैं। ईमेल में MIME हेडर प्राप्तकर्ता को बताते हैं कि कौन-से हिस्से Base64 हैं और कौन-से सादे टेक्स्ट।

HTML और CSS में डेटा URL। data:image/png;base64,iVBORw0KGgo... जैसी URL एक बायनरी फ़ाइल को सीधे दस्तावेज़ में एम्बेड करती है। 1-2 KB के नीचे छोटे आइकनों के लिए उपयोगी, जहाँ बचाई गई HTTP अनुरोध 33 % ओवरहेड और कैशिंग के नुक़सान से ज़्यादा होती है।

API पेलोड। जब JSON या XML API को कोई बायनरी मान स्वीकार करना होता है (अपलोड की गई फ़ाइल, हस्ताक्षर, प्रोफ़ाइल फ़ोटो), तो मानक पैटर्न है बाइट्स को Base64 में एन्कोड करके स्ट्रिंग फ़ील्ड के रूप में भेजना। प्राप्तकर्ता उन्हें सर्वर साइड पर डिकोड करता है। OpenAI का इमेज इनपुट इसी तरह काम करता है, Stripe फ़ाइल अपलोड ऐसे ही प्राप्त करता है, और अधिकांश क्लाउड फ़ंक्शन बायनरी इनपुट इसी तरह स्वीकार करते हैं।

HTTP Basic प्रमाणीकरण। Authorization: Basic <token> हेडर Base64 में एन्कोडेड username:password जोड़ी ले जाता है (RFC 7617)। यह एन्कोडिंग है, एन्क्रिप्शन नहीं: जो भी हेडर देखता है, वह पासवर्ड देखता है। इसी कारण Basic Auth HTTPS की माँग करता है।

प्रमाणपत्र और कुंजियाँ। PEM फ़ाइलें (-----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----) DER-एन्कोडेड ASN.1 बाइट्स का एक Base64-एन्कोडेड ब्लॉब लपेटती हैं। हर TLS प्रमाणपत्र, हर SSH कुंजी फ़ाइल, हर कोड-साइनिंग प्रमाणपत्र PEM लिफ़ाफ़े के अंदर Base64 है।

JWT टोकन। JWT तीन URL-सुरक्षित Base64 खंड हैं जिन्हें बिंदुओं से अलग किया गया है: <header>.<payload>.<signature>। Base64 एन्कोडिंग JWT को हेडर, URL और कुकीज़ में सुरक्षित रूप से यात्रा करने देती है।

कैसे एन्कोड और डिकोड करें

  1. एन्कोड या डिकोड चुनें: रूपांतरण की दिशा का चयन करें।
  2. टेक्स्ट चिपकाएँ या फ़ाइल अपलोड करें: सीधे टेक्स्ट दर्ज करें या एक फ़ाइल खींचकर छोड़ें (ब्राउज़र-साइड एन्कोडिंग के लिए 5 MB तक)।
  3. संस्करण चुनें: ईमेल और प्रमाणपत्रों के लिए मानक Base64, JWT और URL टुकड़ों के लिए URL-सुरक्षित। टूल डिफ़ॉल्ट रूप से मानक है।
  4. परिणाम कॉपी करें: आउटपुट तुरंत अपडेट होता है। अपने क्लिपबोर्ड पर कॉपी करें, या लंबे आउटपुट के लिए डाउनलोड बटन उपयोग करें।

Base64 के संस्करण

विशिष्ट स्थितियों के लिए कई Base64-जैसी एन्कोडिंग मौजूद हैं:

संस्करणअंतरकहाँ उपयोग
मानक (RFC 4648 §4)A-Z, a-z, 0-9, +, /, = पैडिंगईमेल (MIME), PEM, सामान्य बायनरी-से-टेक्स्ट
URL-सुरक्षित (RFC 4648 §5)+ बन जाता है -, / बन जाता है _JWT, URL टुकड़े, फ़ाइल नाम
MIME (RFC 2045)हर 76 वर्णों पर पंक्ति विरामईमेल बॉडी, मेल हेडर (=?utf-8?B?...?= के साथ)
crypt(3) / htpasswdअलग वर्णमाला (./0-9A-Za-z)पुराने Unix पासवर्ड हैश (DES-आधारित)
बिना पैडिंग Base64UrlURL-सुरक्षित बिना अंत के =JWT (RFC 7515 के अनुसार)
Base32 (RFC 4648 §6)32-वर्ण वर्णमाला, केस-असंवेदनशीलTOTP रहस्य, Onion पते
Base5858-वर्ण वर्णमाला (0, O, I, l नहीं)Bitcoin पते, IPFS CID
Ascii85 / Base8585-वर्ण वर्णमाला, 25 % ओवरहेडPDF, PostScript

अधिकांश समय आप मानक या URL-सुरक्षित Base64 चाहते हैं। बाक़ी विशिष्ट प्रोटोकॉल में आती हैं।

Base64 कब उपयोग करें

इसका उपयोग करें जब:

इसका उपयोग न करें जब:

आम जाल

विकल्प और समीप एन्कोडिंग

Base64 डिफ़ॉल्ट है, एकमात्र विकल्प नहीं। सही चुनाव चैनल और आकार बजट पर निर्भर करता है।

एन्कोडिंगओवरहेडताक़तसबसे अच्छा उपयोग
Hex (Base16)100 %पढ़ने में आसान, हर बाइट दो वर्णडिबग आउटपुट, छोटे पहचानकर्ता, रंग कोड
Base32 (RFC 4648)60 %केस-असंवेदनशील, कोई समान वर्ण नहींTOTP रहस्य, Onion पते, आवाज़ श्रुतलेख
Base64 मानक33 %सार्वभौमिक, हर भाषा में हैईमेल, PEM, सामान्य परिवहन
Base64 URL-सुरक्षित33 %URL- और फ़ाइलनाम-सुरक्षितJWT, URL टुकड़े
Base58~37 %0/O/I/l भ्रम नहीं, कोई विशेष वर्ण नहींBitcoin पते, IPFS CID
Ascii85 / Base8525 %Base64 से सघनPDF, PostScript
Base91~22 %और भी सघन, अधिक जटिलदुर्लभ, निच संकोचन संदर्भ
Multipart अपलोड0 %HTTP पर देशी बायनरी परिवहनफ़ाइल अपलोड (ब्राउज़र आपके लिए करते हैं)
gzip + Base64परिवर्तनशीलकभी-कभी कच्चे Base64 से छोटापूर्व-संपीड़ित पेलोड

अधिकांश रोज़मर्रा के काम के लिए, उत्तर Base64 है (मानक या URL-सुरक्षित)। HTTP पर बायनरी फ़ाइल अपलोड के लिए, सही उत्तर आम तौर पर multipart/form-data है, जो बिल्कुल एन्कोड नहीं करता।

गोपनीयता और एन्कोडर

Base64 एन्कोडर और डिकोडर पूरी तरह आपके ब्राउज़र में चलता है। आप जो टेक्स्ट या फ़ाइल इनपुट करते हैं उसे आपके डिवाइस पर JavaScript प्रोसेस करता है, परिणाम पृष्ठ पर रेंडर होता है, और कुछ भी सर्वर पर नहीं भेजा जाता। कुछ भी लॉग नहीं होता, कुछ भी पृष्ठ से बाहर निकलने के बाद संग्रहीत नहीं होता, और कोई एनालिटिक्स टैग सामग्री नहीं देखता। ऐसी चीज़ों के लिए जिन्हें आप Base64 में एन्कोड कर सकते हैं (PEM प्रमाणपत्र, निजी कुंजियाँ, उत्पादन सिस्टम के JWT पेलोड, असली ग्राहक डेटा के साथ API अनुरोधों के मसौदे), यह सख़्ती से स्थानीय प्रवाह सही डिफ़ॉल्ट है। पूरा टूल पृष्ठ लोड होने के बाद ऑफ़लाइन चल सकता है, जिसे आप नेटवर्क बंद करके और वही इनपुट फिर से एन्कोड करके सत्यापित कर सकते हैं।

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

क्या Base64 मेरे डेटा को एन्क्रिप्ट करता है?

नहीं। Base64 एक एन्कोडिंग है, एन्क्रिप्शन नहीं। कोई भी Base64 स्ट्रिंग को डीकोड कर सकता है, यह कोई सुरक्षा नहीं लाता। यदि आप डेटा की सुरक्षा करना चाहते हैं, तो वास्तविक एन्क्रिप्शन (AES, RSA, आदि) का उपयोग करें।

Base64 फ़ाइलों को भारी क्यों बनाता है?

Base64 एन्कोडिंग डेटा के आकार को लगभग 33% बढ़ा देती है। तीन बाइनरी बाइट्स चार Base64 वर्ण बन जाते हैं। यह ओवरहेड बाइनरी को टेक्स्ट के रूप में सुरक्षित रूप से प्रसारित करने की कीमत है।

क्या मैं केवल टेक्स्ट नहीं, फ़ाइलें भी एन्कोड कर सकता हूँ?

हाँ। कोई भी फ़ाइल (छवियाँ, PDF, ऑडियो) Base64 में एन्कोड की जा सकती है। इसका उपयोग आमतौर पर छोटी छवियों को Data URL के रूप में सीधे HTML या CSS में एम्बेड करने के लिए किया जाता है।

Base64 का उपयोग कब नहीं करें?

बड़ी फ़ाइलों के लिए इसका उपयोग न करें। 1 MB की एक छवि Base64 टेक्स्ट में 1.33 MB बन जाती है, और ब्राउज़र इसे अलग से कैश नहीं कर सकता। कुछ KB से अधिक किसी भी चीज़ के लिए, फ़ाइल को सामान्य रूप से सर्व करना अधिक कुशल है।

What is the difference between standard Base64 and URL-safe Base64?

Standard Base64 (RFC 4648 section 4) uses the characters A-Z, a-z, 0-9, +, / with = padding. URL-safe Base64 (RFC 4648 section 5) swaps + for - and / for _ so the string is safe to drop into a URL or a filename without percent-encoding. JWT tokens use the URL-safe variant.

Why does Base64 sometimes have one or two = signs at the end?

The = is padding. Base64 encodes input in 3-byte groups; if the input length is not a multiple of 3, the last group is padded with zero bits and one or two = characters mark the missing bytes. One = means one missing byte, two = means two missing bytes.