आधार 64 एन्कोडिंग किसके लिए प्रयोग किया जाता है?


781

मैंने सुना है कि लोग "बेस 64 एन्कोडिंग" के बारे में यहां और वहां बात कर रहे हैं। इसका क्या उपयोग है?


1
Base64_encode () के लिए मैनुअल से : "इस एन्कोडिंग को बाइनरी डेटा को ट्रांसपोर्ट परतों के माध्यम से परिवहन से बचने के लिए डिज़ाइन किया गया है जो 8-बिट स्वच्छ नहीं हैं, जैसे कि मेल बॉडी।"
still_dreaming_1

जवाबों:


939

जब आपके पास कुछ बाइनरी डेटा होता है, जिसे आप किसी नेटवर्क में शिप करना चाहते हैं, तो आप आम तौर पर कच्चे प्रारूप में वायर पर केवल बिट्स और बाइट्स को स्ट्रीमिंग करके ऐसा नहीं करते हैं। क्यों? क्योंकि कुछ मीडिया स्ट्रीमिंग टेक्स्ट के लिए बने हैं। आप कभी नहीं जानते - कुछ प्रोटोकॉल आपके द्विआधारी डेटा को नियंत्रण वर्ण (जैसे मॉडेम) के रूप में व्याख्या कर सकते हैं, या आपके द्विआधारी डेटा को खराब किया जा सकता है क्योंकि अंतर्निहित प्रोटोकॉल सोच सकते हैं कि आपने एक विशेष वर्ण संयोजन में प्रवेश किया है (जैसे कि एफ़टीपी अनुवाद कैसे करता है। अंत)।

तो इसके चारों ओर पाने के लिए, लोग द्विआधारी डेटा को वर्णों में एन्कोड करते हैं। बेस 64 इन प्रकार के एनकोडिंग में से एक है।

क्यों 64?
क्योंकि आप आम तौर पर एक ही 64 वर्णों पर कई चरित्र सेटों में मौजूद होने पर भरोसा कर सकते हैं, और आप इस बात पर पूरी तरह आश्वस्त हो सकते हैं कि आपके डेटा का तार अनियंत्रित होकर दूसरी तरफ जा रहा है।


104
(सिद्धांत रूप में आप बेस -80 एनकोडिंग या ऐसा ही कुछ कर सकते हैं, लेकिन यह काफी कठिन होगा। दो की शक्तियां द्विआधारी के लिए स्वाभाविक रूप हैं।)
जॉन स्कीट

13
@yokees: कोई गारंटी नहीं है, वे सिर्फ ऐसे पात्र हैं जो लगभग हमेशा सुरक्षित हैं। यही कारण है कि बेस -64 ( en.wikipedia.org/wiki/Base-64 ) के कई रूप हैं ।

8
क्या इसका मतलब यह है कि सभी नेटवर्क प्रकार के डेटा पासिंग को किसी प्रकार के एन्कोडिंग का उपयोग करना चाहिए?
टेनर समर्स

6
लेकिन स्ट्रिंग डेटा को एन्कोड करने के लिए बेस 64 पद्धति का उपयोग क्यों किया जाता है? उदाहरण के लिए जावास्क्रिप्ट एटब फंक्शन में क्या सर्वर का मतलब बेस ६४ फॉर्मेट में json फाइल को एनकोड करना है? विशेष पात्र उपयोग का मामला हो सकता है लेकिन उस मामले में utf8 क्यों नहीं, क्या वे समान हैं? इसके बारे में कोई और संसाधन बहुत सराहना की जाएगी धन्यवाद।
partizanos

4
कम से कम कुछ प्रोटोकॉल की एक सूची जो विफल होगी अगर किसी को पता हो तो अच्छा होगा।
तडेज

202

यह मूल रूप से ASCII पाठ में मनमाना बाइनरी डेटा एन्कोडिंग का एक तरीका है। यह डेटा के प्रति 3 बाइट्स में 4 अक्षर लेता है, साथ ही संभवतः अंत में थोड़ा सा पैडिंग करता है।

अनिवार्य रूप से इनपुट के प्रत्येक 6 बिट 64-वर्ण वर्णमाला में एन्कोडेड है। "मानक" वर्णमाला AZ, az, 0-9 और + और / का उपयोग करता है, = एक पैडिंग चरित्र के रूप में। URL-safe वेरिएंट हैं।

विकिपीडिया अधिक जानकारी का एक अच्छा स्रोत है।


Php की तरह एक लैंगंगे में, द्विआधारी डेटा से आए थे। हम लगभग हमेशा स्ट्रिंग डेटा के साथ काम करते हैं जो पाठ है।
चोलथी पॉल टिटोपिक 14

3
@CholthiPaulTtiopic: एन्क्रिप्शन या संपीड़न, या ध्वनि / छवियों / वीडियो के परिणाम।
जॉन स्कीट

1
@CholthiPaulTtiopic: मुझे डर है कि मुझे नहीं पता कि आपके "स्टोरेज के बारे में क्या मतलब है" लेकिन इस बिंदु पर मुझे लगता है कि हम कुछ हद तक विषय से दूर हैं।
जॉन स्कीट

2
@CholthiPaulTtiopic: मैं "स्ट्रिंग बाइनरी" के संदर्भ में सोचने से दृढ़ता से बचूंगा। बाइनरी डेटा को बाइनरी डेटा के रूप में माना जाना चाहिए, और पाठ के रूप में नहीं माना जाना चाहिए । मैंने एसओ पर शाब्दिक सैकड़ों - संभवतः हजारों प्रश्न देखे हैं, जो मूल रूप से इस अंतर पर पर्याप्त ध्यान न रखने वाले लोगों को उबालते हैं।
जॉन स्कीट

1
@ still_dreaming_1 PHP उन्हें कॉल करता है binary strings। (स्रोत) php.net/manual/en/function.pack.php
चोलथी पॉल टिटोपिक

123

बेस -64 एन्कोडिंग द्विआधारी डेटा लेने और इसे पाठ में बदलने का एक तरीका है ताकि यह ई-मेल और एचटीएमएल फॉर्म डेटा जैसी चीजों में अधिक आसानी से प्रसारित हो।

http://en.wikipedia.org/wiki/Base64


116

यह द्विआधारी डेटा का एक टेक्स्ट एन्कोडिंग है जहां परिणामी पाठ में अक्षरों, संख्याओं और प्रतीकों "+", "/" और "=" के अलावा कुछ भी नहीं है। यह मीडिया पर द्विआधारी डेटा को संग्रहीत / प्रसारित करने का एक सुविधाजनक तरीका है जो विशेष रूप से पाठ डेटा के लिए उपयोग किया जाता है।

लेकिन बेस -64 क्यों? द्विआधारी डेटा को पाठ में परिवर्तित करने के दो विकल्प जो तुरंत वसंत को ध्यान में रखते हैं:

  1. दशमलव: प्रत्येक बाइट के दशमलव मान को तीन संख्याओं के रूप में संग्रहीत करें: 045 112 101 037 आदि जहां प्रत्येक बाइट को 3 बाइट द्वारा दर्शाया जाता है। डेटा तीन गुना फूला हुआ है।
  2. हेक्साडेसिमल: बाइट्स को हेक्स जोड़े के रूप में संग्रहीत करें: एसी 47 0 डी 1 ए आदि जहां प्रत्येक बाइट को 2 बाइट्स द्वारा दर्शाया जाता है। डेटा दो-गुना हो जाता है।

6-बिट्स (6 x 4 = 24 बिट्स) वाले 4 वर्णों में बेस -64 मैप्स 3 बाइट्स (8 x 3 = 24 बिट्स)। परिणाम "TWFuIGlzIGRpc3Rpb ..." जैसा कुछ दिखता है। इसलिए ब्लोटिंग केवल 4/3 = 1.3333333 मूल है।


10
क्या मैं सही ढंग से समझता हूं, कि 64 सबसे अच्छा विकल्प है क्योंकि यह दो की उच्चतम शक्ति है जो एक मुद्रण योग्य ASCII चरित्र में परिवर्तनीय है (उनमें से 95 है)?
वोहो

यदि दोनों मामलों में वे 24 बिट्स हैं, तो ब्लोटिंग 1: 1 नहीं है? या जब आप 4 अक्षर कहते हैं जो 6 बिट्स को फैलाते हैं, तो क्या आपका मतलब है कि वास्तव में प्रति बिट 8 बिट्स हैं, लेकिन पहले दो 0 0 गद्देदार हैं?
डेविड क्लेम्फनर

1
@ Backwards_Dave प्रत्येक 6 बिट्स को 8 बिट्स में व्यक्त किया जाता है। तो ब्लोटिंग 8: 6, या 4: 3 है।
ऐटस गोरल

82

इसके अलावा जो पहले से ही कहा गया है, दो बहुत ही सामान्य उपयोग जो सूचीबद्ध नहीं किए गए हैं

हैश:

हैशिंग एक तरह से कार्य हैं जो बाइट्स के ब्लॉक को एक निश्चित आकार के बाइट्स के दूसरे ब्लॉक में बदलते हैं जैसे कि 128bit या 256bit (SHA / MD5)। Base64 में परिणामी बाइट्स को परिवर्तित करने से हैश को प्रदर्शित करना बहुत आसान हो जाता है, खासकर जब आप अखंडता के लिए एक चेकसम की तुलना कर रहे हों। बेस 64 में बहुत बार देखा जाता है कि कई लोग बेस 64 को हीश के रूप में भूल जाते हैं।

क्रिप्टोग्राफी:

चूंकि एन्क्रिप्शन कुंजी में टेक्स्ट होना जरूरी नहीं है, लेकिन कच्चे बाइट्स को कभी-कभी इसे किसी फ़ाइल या डेटाबेस में संग्रहीत करना आवश्यक होता है, जिसके लिए बेस 64 काम आता है। परिणामी एन्क्रिप्टेड बाइट्स के साथ भी।

ध्यान दें कि हालाँकि, क्रिप्टोग्राफी में बेस 64 का उपयोग किया जाता है, सुरक्षा तंत्र नहीं है। कोई भी आधार 64 स्ट्रिंग को अपनी मूल बाइट्स में बदल सकता है, इसलिए इसका उपयोग डेटा की सुरक्षा के लिए एक साधन के रूप में नहीं किया जाना चाहिए, केवल कच्चे बाइट्स को आसानी से प्रदर्शित या संग्रहीत करने के लिए एक प्रारूप के रूप में।

प्रमाण पत्र

पीईएम प्रारूप में x509 प्रमाण पत्र आधार 64 एन्कोडेड हैं। http://how2ssl.com/articles/working_with_pem_files/


4
यह वास्तव में आसान है, प्रसंस्करण, बहुत से मामलों में बाइट्स के रूप में बाइट्स को स्टोर करने के लिए। यहां तक ​​कि एक डेटाबेस में, और विशेष रूप से एक फ़ाइल में (यदि निश्चित-लंबाई रिकॉर्ड का उपयोग किया जाता है, या बाइट्स केवल सामग्री हैं)। बेस 64 का उपयोग आम तौर पर तब किया जाता है जब उन बाइट्स को कहीं ट्रांसमिट करने का इरादा होता है, विशेष रूप से एक चैनल पर जो बिट्स को बंद कर सकते हैं या कुछ बाइट्स को नियंत्रण कोड के रूप में व्याख्या कर सकते हैं।
cHao

मैंने कभी भी किसी हैश को 8 बिट पूर्णांक, 0,1,255,36 के रूप में लिखा हुआ नहीं देखा ... और इसे UTF-8 या किसी अन्य एन्कोडिंग के साथ प्रदर्शित करने से कोई मतलब नहीं होगा, आप इसे बेस 64 के अलावा अन्य कैसे प्रदर्शित करेंगे? एन्क्रिप्शन कुंजी और एन्क्रिप्टेड डेटा अक्सर कॉन्फ़िगरेशन और एक्सएमएल फाइलों में संग्रहीत होते हैं जहां आप कच्चे बाइट्स को स्टोर नहीं कर सकते। मैं मानता हूं कि अगर आप इसे कच्चे बाइट्स के रूप में संग्रहीत कर सकते हैं तो हर तरह से, लेकिन आधार 64 उन स्थितियों के लिए है जब आप नहीं कर सकते। संचारण से परे बेस 64 के कई उपयोग हैं। ये केवल दो सामान्य परिदृश्य हैं जहां आप इसे देखेंगे।
डेस्पर्टर

1
आप हैश को हेक्स के रूप में प्रदर्शित करेंगे, दशमलव को नहीं। हैश के लिए, यह वास्तव में बेस 64 की तुलना में अधिक सामान्य है।
cHao

@ हाहा हां, यह भी आम है। हेक्स अंक किसी भी द्विआधारी डेटा का प्रतिनिधित्व कर सकते हैं, लेकिन आधार 64 में बहुत कम जगह लेने का लाभ है क्योंकि यह अधिक वर्णों का उपयोग करता है।
डेस्परटेर

45

वर्षों पहले, जब मेलिंग कार्यक्षमता शुरू की गई थी, तो यह पूरी तरह से पाठ आधारित था, जैसा कि समय बीत गया, छवि और मीडिया (ऑडियो, वीडियो आदि) जैसे अनुलग्नकों की आवश्यकता अस्तित्व में आई। जब इन अनुलग्नकों को इंटरनेट पर भेजा जाता है (जो मूल रूप से बाइनरी डेटा के रूप में होता है), तो बाइनरी डेटा के भ्रष्ट होने की संभावना इसके कच्चे रूप में अधिक होती है। तो, इस समस्या से निपटने के लिए BASE64 साथ आया।

बाइनरी डेटा के साथ समस्या यह है कि इसमें अशक्त वर्ण हैं, जैसे कुछ भाषाओं में C, C ++, वर्ण स्ट्रिंग के अंत का प्रतिनिधित्व करते हैं, इसलिए NULL बाइट्स वाले कच्चे रूप में बाइनरी डेटा भेजने से एक फ़ाइल पूरी तरह से पढ़ने से रोकती है और एक भ्रष्ट डेटा में ले जाती है।

उदाहरण के लिए :

सी और सी ++ में, यह "अशक्त" चरित्र एक स्ट्रिंग के अंत को दर्शाता है। तो "हेलो" को इस तरह संग्रहीत किया जाता है:

हैलो

72 69 76 76 79 00

00 कहता है "यहाँ रुक जाओ"।

अब BASE64 एन्कोडिंग कैसे काम करता है, इसमें गोता लगाएँ।

ध्यान देने योग्य बात: स्ट्रिंग की लंबाई 3 से अधिक होनी चाहिए।

उदाहरण 1 :

स्ट्रिंग एन्कोडेड: "ऐस", लंबाई = 3

1) प्रत्येक वर्ण को दशमलव में बदलें।

ए = 97, सी = ९९, ई = १०१

यहां छवि विवरण दर्ज करें

2) प्रत्येक दशमलव को 8-बिट बाइनरी प्रतिनिधित्व में बदलें।

97 = 01100001, 99 = 01100011, 101 = 01100101

संयुक्त: 01100001 01100011 01100101

3) 6-बिट के समूह में अलग।

011000 010110 001101 100101

4) द्विआधारी को दशमलव में गणना करें

011000 = 24, 010110 = 22, 001101 = 13, 100101 = 37

5) Base64 चार्ट का उपयोग करके base64 को गुप्त दशमलव वर्ण।

24 = वाई, 22 = डब्ल्यू, 13 = एन, 37 = एल

"इक्का" => "यौवन"

यहां छवि विवरण दर्ज करें

उदाहरण 2:

स्ट्रिंग एन्कोडेड होने के लिए: "abcd" लंबाई = 4, यह 3 से अधिक नहीं है। इसलिए स्ट्रिंग की लंबाई 3 से अधिक बनाने के लिए, हमें लंबाई बनाने के लिए 2 बिट पैडिंग जोड़ना होगा। 6. पैडिंग बिट "=" चिन्ह द्वारा दर्शाया गया है।

ध्यान दिया जाना: एक गद्दी बिट दो शून्य 00 के बराबर होती है, इसलिए दो गद्दी बिट चार शून्य 0000 के बराबर होती है।

तो प्रक्रिया शुरू करने देता है: -

1) प्रत्येक वर्ण को दशमलव में बदलें।

a = 97, b = 98, c = 99, d = 100

2) प्रत्येक दशमलव को 8-बिट बाइनरी प्रतिनिधित्व में बदलें।

97 = 01100001, 98 = 01100010, 99 = 01100011, 100 = 01100100

3) 6-बिट के समूह में अलग करें।

011000, 010110, 001001, 100011, 011001, 00

इसलिए अंतिम 6-बिट पूर्ण नहीं है इसलिए हम दो पैडिंग बिट सम्मिलित करते हैं जो चार शून्य "0000" के बराबर होती है।

011000, 010110, 001001, 100011, 011001, 000000 ==

अब, यह बराबर है। अंत में दो बराबर संकेत दिखाते हैं कि 4 शून्य जोड़े गए थे (डिकोडिंग में मदद करता है)।

4) द्विआधारी को दशमलव में गणना करें।

011000 = 24, 010110 = 22, 001001 = 9, 100011 = 35, 011001 = 25, 000000/0 ==

5) Base64 चार्ट का उपयोग करके base64 को गुप्त दशमलव वर्ण।

24 = वाई, 22 = डब्ल्यू, 9 = जे, 35 = जे, 25 = जेड, 0 = ए ==

"Abcd" => "YWJjZA =="


5
यह वास्तव में एक महान व्याख्या है
महेशमंज

28

कंप्यूटरों के शुरुआती दिनों में, जब टेलीफोन लाइन अंतर-सिस्टम संचार विशेष रूप से विश्वसनीय नहीं था, तो डेटा अखंडता को सत्यापित करने का एक त्वरित और गंदा तरीका इस्तेमाल किया गया था: "बिट समता"। इस विधि में, प्रत्येक बाइट प्रेषित 7-बिट डेटा होगा, और 8 वीं 1 या 0 होगा, बाइट में कुल 1 बिट्स को भी बाध्य करने के लिए।

इसलिए Ix01 को 0x81 के रूप में प्रसारित किया जाएगा; 0x02 0x82 होगा; 0x03 रहेगा 0x03 आदि।

इस प्रणाली को आगे बढ़ाने के लिए, जब ASCII वर्ण सेट को परिभाषित किया गया था, केवल 00-7F वर्ण निर्दिष्ट किए गए थे। (आज भी, 80-एफएफ सीमा में निर्धारित सभी वर्ण अमानक हैं)

दिन के कई राउटर ने समता की जांच और बाइट का अनुवाद हार्डवेयर में किया, जिससे कंप्यूटर को 7-बिट डेटा से सख्ती से निपटने के लिए संलग्न किया गया। यह बल ईमेल अटैचमेंट (और अन्य सभी डेटा, यही कारण है कि HTTP और SMTP प्रोटोकॉल टेक्स्ट-आधारित हैं), को केवल-पाठ प्रारूप में परिवर्तित करने के लिए।

राउटरों में से कुछ 90 के दशक में बच गए। मुझे संदेह है कि उनमें से कोई भी आज उपयोग में है।


2
यह चर्चा का एक उत्कृष्ट बिंदु है और एक दिलचस्प इतिहास सबक है, धन्यवाद।
दान बेहार्ड

26

से http://en.wikipedia.org/wiki/Base64

Base64 शब्द एक विशिष्ट MIME सामग्री हस्तांतरण एन्कोडिंग को संदर्भित करता है। यह किसी भी समान एन्कोडिंग योजना के लिए एक सामान्य शब्द के रूप में भी प्रयोग किया जाता है जो द्विआधारी डेटा को संख्यात्मक रूप से व्यवहार करता है और इसे आधार 64 प्रतिनिधित्व में अनुवाद करता है। बेस की विशेष पसंद चरित्र सेट एन्कोडिंग के इतिहास के कारण है: एक 64 अक्षरों का एक सेट चुन सकता है जो सबसे आम सांकेतिक शब्दों में सबसे आम का हिस्सा है, और प्रिंट करने योग्य भी है। यह संयोजन डेटा को सिस्टम के माध्यम से संशोधित करने की संभावना नहीं छोड़ता है, जैसे कि ईमेल, जो परंपरागत रूप से 8-बिट साफ नहीं थे।

बेस 64 का उपयोग विभिन्न संदर्भों में किया जा सकता है:

  • विकास और थंडरबर्ड ई-मेल पासवर्डों को बाधित करने के लिए Base64 का उपयोग करते हैं [1]
  • बेस 64 का उपयोग टेक्स्ट को प्रसारित करने और स्टोर करने के लिए किया जा सकता है जो अन्यथा सीमांकक टकराव का कारण हो सकता है
  • Base64 को अक्सर क्रिप्टोग्राफ़िक कुंजी प्रबंधन के ओवरहेड के बिना रहस्यों को अस्पष्ट करने के लिए एक त्वरित लेकिन असुरक्षित शॉर्टकट के रूप में उपयोग किया जाता है

  • स्पैमर्स बुनियादी एंटी-स्पैमिंग टूल से बचने के लिए बेस 64 का उपयोग करते हैं, जो अक्सर बेस 64 को डीकोड नहीं करते हैं और इसलिए एन्कोडिंग संदेशों में कीवर्ड का पता नहीं लगा सकते हैं।

  • Base64 का उपयोग LDIF फ़ाइलों में वर्ण स्ट्रिंग्स को एन्कोड करने के लिए किया जाता है
  • बेस 64 को कभी-कभी एक एक्सएमएल फ़ाइल में बाइनरी डेटा को एम्बेड करने के लिए उपयोग किया जाता है, सिंटैक्स के समान ...... उदाहरण के लिए फ़ायरफ़ॉक्स का बुकमार्क। html।
  • बेस 64 का उपयोग सरकारी फिस्कल सिग्नेचर प्रिंटिंग डिवाइस (आमतौर पर, सीरियल या समानांतर पोर्ट पर) के साथ संचार करते समय किया जाता है, ताकि हस्ताक्षर के लिए रसीद पात्रों को स्थानांतरित करने में देरी को कम किया जा सके।
  • बेस 64 का उपयोग बाइनरी फ़ाइलों को लिपियों के भीतर करने के लिए किया जाता है, जैसे कि बाहरी फ़ाइलों के आधार पर बचने के लिए लिपियों के भीतर।
  • एक सीएसएस संपत्ति में पृष्ठभूमि छवि के रूप में कच्चे छवि डेटा एम्बेड करने के लिए इस्तेमाल किया जा सकता है।

11

कुछ परिवहन प्रोटोकॉल केवल अल्फ़ान्यूमेरिकल वर्णों को प्रेषित करने की अनुमति देते हैं। बस एक ऐसी स्थिति की कल्पना करें जहां विशेष वर्णों को नियंत्रित करने के लिए नियंत्रण वर्णों का उपयोग किया जाता है और / या जो केवल प्रति वर्ण सीमित बिट चौड़ाई का समर्थन करता है। बेस 64 किसी भी इनपुट को एन्कोडिंग में बदल देता है जो केवल अल्फ़ान्यूमेरिक वर्णों का उपयोग करता है +, /और =एक पैडिंग चरित्र के रूप में।


8

Base64 का उपयोग जो मैं यहां बताने जा रहा हूं वह कुछ हद तक हैक है। इसलिए यदि आपको हैक पसंद नहीं है, तो कृपया मत जाओ।

मुझे तब परेशानी हुई जब मुझे पता चला कि MySQL का utf8 4-बाइट यूनिकोड वर्णों का समर्थन नहीं करता है क्योंकि यह utf8 के 3-बाइट संस्करण का उपयोग करता है। इसलिए मैंने MySQL के utf8 पर पूर्ण 4-बाइट यूनिकोड का समर्थन करने के लिए क्या किया? डेटाबेस में भंडारण करते समय खैर, base64 स्ट्रिंग्स को एनकोड करता है और पुनर्प्राप्त करते समय base64 को डिकोड करता है।

चूंकि बेस 64 एन्कोडिंग और डिकोडिंग बहुत तेज है, इसलिए उपरोक्त पूरी तरह से काम करता है।

आपके पास निम्नलिखित बातों पर ध्यान देना चाहिए:

  • Base64 एन्कोडिंग 33% अधिक संग्रहण का उपयोग करता है

  • डेटाबेस में संग्रहीत स्ट्रिंग्स मानव पठनीय नहीं हो सकते हैं (आप इसे एक विशेषता के रूप में बेच सकते हैं जो डेटाबेस स्ट्रिंग्स एन्क्रिप्शन के मूल रूप का उपयोग करते हैं)।

आप किसी भी भंडारण इंजन के लिए उपरोक्त विधि का उपयोग कर सकते हैं जो यूनिकोड का समर्थन नहीं करता है।


6
"आप इसे एक फीचर के रूप में बेच सकते हैं जो डेटाबेस स्ट्रिंग्स एन्क्रिप्शन के एक मूल रूप का उपयोग करता है" मुझे आपकी शैली पसंद है: डी
एर्केन

7
"आप इसे एक फीचर के रूप में बेच सकते हैं जो डेटाबेस स्ट्रिंग्स एन्क्रिप्शन के एक मूल रूप का उपयोग करता है" क्या कहने के लिए एक भयानक बात है: डी
एलेक्स

1
आधारभूत
डिकोडी

1
@ एलेक्स बिल्कुल नहीं "कहने के लिए भयानक बात"। Db प्रशासकों द्वारा इसे अपठनीय बनाने के लिए दूसरा डिग्री संवेदनशील डेटा बेस 64 एनकोडेड होना ठीक है। डेटा के हर टुकड़े के लिए एन्क्रिप्शन का उच्चतम स्तर होना हमेशा आवश्यक नहीं होता है। उदाहरण के लिए, यदि आप db एडमिनिस्ट्रेटर से "कमेंट्स" छिपाना चाहते हैं, तो base64 जॉब के लिए उपयुक्त है। Gratcias!
तुलसी मूसा

1
यह ध्यान देने योग्य है कि MySQL के पास अब सभी यूनिकोड के लिए समर्थन है, हालांकि पीछे की संगतता के प्रयोजनों के लिए, उनका utf8प्रकार अभी भी केवल तीन-बाइट्स है; यदि आप असली चीज़ चाहते हैं, तो उपयोग करें utf8mb4। अच्छा हैक, लेकिन अब आवश्यक नहीं है।
TRIG

7

इसका उपयोग ASCII पाठ में मनमाने ढंग से बाइनरी डेटा को परिवर्तित करने के लिए किया जाता है।

उदाहरण के लिए, ई-मेल अटैचमेंट इस तरह भेजे जाते हैं।


7

जब हम वेब सेवाओं के माध्यम से बड़ी द्विआधारी वस्तुओं (छवियों) को स्थानांतरित करते हैं तो मैं इसे व्यावहारिक अर्थों में उपयोग करता हूं। इसलिए जब मैं एक अजगर स्क्रिप्ट का उपयोग करके सी # वेब सेवा का परीक्षण कर रहा हूं, तो बाइनरी ऑब्जेक्ट को थोड़ा जादू के साथ फिर से बनाया जा सकता है।

[अजगर में]

import base64
imageAsBytes = base64.b64decode( dataFromWS )

1
क्या डेटा तेजी से यात्रा करता है?
फेलिपएम

6

“Base64 एन्कोडिंग योजनाओं का उपयोग आमतौर पर तब किया जाता है जब द्विआधारी डेटा को एन्कोड करने की आवश्यकता होती है, जिसे टेक्सटाइल डेटा से निपटने के लिए डिज़ाइन किए गए मीडिया पर संग्रहीत और स्थानांतरित किया जाना चाहिए। यह सुनिश्चित करना है कि परिवहन के दौरान संशोधन के बिना डेटा बरकरार रहे ”(विकी, 2017)

उदाहरण निम्नलिखित हो सकता है: आपके पास एक वेब सेवा है जो केवल ASCII वर्णों को स्वीकार करती है। आप उपयोगकर्ता के डेटा को किसी अन्य स्थान (API) पर सहेजना और स्थानांतरित करना चाहते हैं, लेकिन प्राप्तकर्ता अछूता डेटा प्राप्त करना चाहता है। बेस 64 उसके लिए है। । । केवल नकारात्मक पक्ष यह है कि बेस 64 एनकोडिंग को नियमित तारों की तुलना में लगभग 33% अधिक स्थान की आवश्यकता होगी।

एक और उदाहरण :: uenc = यूआरएल एन्कोडेड = aHR0cDovL2xvYy5tYWdlbnRvLmNvbS9hc2ljcy1tZW4tcy1nZWwta2F5YW5vLXhpaS5odG1s = http://loc.querytip.com/asics-men-s-gel-kayano-xii.html

जैसा कि आप देख सकते हैं कि हम URL में char "/" नहीं डाल सकते हैं यदि हम अंतिम विज़िट किए गए URL को पैरामीटर के रूप में भेजना चाहते हैं क्योंकि हम "MOD फिर से लिखना" के लिए विशेषता / मान नियम तोड़ेंगे - GET पैरामीटर।

एक पूर्ण उदाहरण होगा: " http://loc.querytip.com/checkout/cart/add/uenc/http://loc.magento.com/asics-men-s-gel-kayano-xii.html-product / 93 /


4

अधिकतर, मैंने देखा है कि इसका उपयोग बाइनरी डेटा को संदर्भों में सांकेतिक शब्दों में बदलना है जो केवल एएससीआई या एक साधारण चरित्र सेट को संभाल सकता है।


3

ब्रैड क्या कह रहा है, इस पर थोड़ा विस्तार करने के लिए: ईमेल और यूज़नेट के लिए कई परिवहन तंत्र और डेटा को स्थानांतरित करने के अन्य तरीके "8 बिट क्लीन" नहीं हैं, जिसका अर्थ है कि मानक एससीआई वर्ण सेट के बाहर के पात्रों को पारगमन में लगाया जा सकता है - उदाहरण के लिए। 0x0D को एक गाड़ी वापसी के रूप में देखा जा सकता है, और एक गाड़ी वापसी और लाइन फीड में बदल गई। बेस 64 में सभी बाइनरी पात्रों को कई मानक ascii अक्षरों और संख्याओं और विराम चिह्नों में मैप किया गया है ताकि वे इस तरह से मंगाई न जाएं।


2

Base64

बेस 64 कई समान एन्कोडिंग योजनाओं के लिए एक सामान्य शब्द है जो द्विआधारी डेटा को संख्यात्मक रूप से मानकर और इसे बेस 64 प्रतिनिधित्व में अनुवाद करके एनकोड करता है। Base64 शब्द एक विशेष MIME सामग्री हस्तांतरण एन्कोडिंग से उत्पन्न होता है।

बेस 64 एन्कोडिंग योजनाओं का उपयोग आमतौर पर तब किया जाता है जब द्विआधारी डेटा को एनकोड करने की आवश्यकता होती है, जिसे टेक्सटाइल डेटा से निपटने के लिए डिज़ाइन किए गए मीडिया पर संग्रहीत और स्थानांतरित किया जाना चाहिए। यह सुनिश्चित करने के लिए है कि परिवहन के दौरान संशोधन के बिना डेटा बरकरार रहे। बेस 64 का उपयोग आमतौर पर MIME के ​​माध्यम से ईमेल सहित कई अनुप्रयोगों में किया जाता है, और XML में जटिल डेटा संग्रहीत करता है।


0

बेस 64 का उपयोग कई उद्देश्यों के लिए किया जा सकता है।

प्राथमिक कारण बाइनरी डेटा को पास करने योग्य चीज़ में बदलना है।

मैं कभी-कभी इसका उपयोग JSON डेटा को एक साइट से दूसरी साइट पर पास करने के लिए करता हूं, उपयोगकर्ता के बारे में कुकीज़ में जानकारी संग्रहीत करता हूं।

नोट: आप "एन्क्रिप्शन के लिए" इसका उपयोग कर सकते हैं - मैं यह नहीं देखता कि लोग यह क्यों कहते हैं कि आप नहीं कर सकते हैं, और यह एन्क्रिप्शन नहीं है, हालांकि यह आसानी से टूटने योग्य होगा और पर फेंक दिया जाता है। एन्क्रिप्शन का अर्थ है डेटा के एक स्ट्रिंग को डेटा के दूसरे स्ट्रिंग में परिवर्तित करने के अलावा और कुछ नहीं है जिसे बाद में डिक्रिप्ट किया जा सकता है या नहीं, और यही आधार 64 करता है।



2
आप "एन्क्रिप्शन" की परिभाषा की बहुत दूर तक शाब्दिक व्याख्या कर रहे हैं । यह शब्द अपनी उत्पत्ति की तुलना में कुछ अधिक विशिष्ट रूप से विकसित हुआ है।
दान बेहार्ड

0

एक हेक्साडेसिमल अंक एक कुतरना (4 बिट्स) का है। दो निबल 8 बिट बनाते हैं जिन्हें 1 बाइट भी कहा जाता है।

MD5 एक 128-बिट आउटपुट उत्पन्न करता है जिसे 32 हेक्साडेसिमल अंकों के अनुक्रम का उपयोग करके दर्शाया जाता है, जो बदले में 32 * 4 = 128 बिट्स होते हैं। 128 बिट्स 16 बाइट्स बनाते हैं (क्योंकि 1 बाइट 8 बिट्स है)।

प्रत्येक बेस 64 कैरेक्टर में 6 बिट्स (अंतिम नॉन-पैड कैरेक्टर को छोड़कर जो 2, 4 या 6 बिट्स को एन्कोड कर सकते हैं, और फाइनल पैड कैरेक्टर, यदि कोई हो) को एनकोड करता है। इसलिए, बेस 64 एनकोडिंग के लिए, 128-बिट हैश के लिए कम से कम ⌉128 / 6 22 = 22 वर्ण, प्लस पैड यदि कोई हो, की आवश्यकता होती है।

बेस 64 का उपयोग करके, हम अपनी वांछित लंबाई (6, 8, या 10) के एन्कोडेड आउटपुट का उत्पादन कर सकते हैं। अगर हम 8 char लंबे आउटपुट को तय करना चुनते हैं, तो यह केवल 8 बाइट्स पर कब्जा कर लेता है, जबकि 128-बिट हैश आउटपुट के लिए यह 16 बाइट्स पर कब्जा कर रहा था।

तो, सुरक्षा के अलावा, बेस 64 एन्कोडिंग का उपयोग खपत की गई जगह को कम करने के लिए भी किया जाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.