जावा में बेस64 में स्ट्रिंग को कैसे एन्कोड करना

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

सामग्री

.

कदम

1
सूचना और फ़ाइल नाम दर्ज करें
  • 2
    अपने संपादक को प्रारंभ करें, उदाहरण के लिए नोटपैड, और आरंभिक जानकारी दर्ज करें, जैसे कि क्लास घोषणा और ज्ञात स्थिरांक Base64.java फ़ाइल को कॉल करें
  • 3
    स्थिर मूल्यों को निर्दिष्ट किया जाता है, इसलिए प्रासंगिक आरएफसी में लेख, कहता है। कार्यक्रम शुरू करने से पहले सभी संबंधित आरएफसी को पढ़ना आम तौर पर एक अच्छा विचार है।
    सार्वजनिक कक्षा बेस64 {निजी स्थिर अंतिम स्ट्रिंग base64code = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"+ "abcdefghijklmnopqrstuvwxyz" + "0123456789" + "+ /"- निजी स्थिर अंतिम अंतर splitLinesAt = 76-
  • 4
    बाइट्स के रूप में वर्णों का इलाज करने का अर्थ है कि जापानी या चीनी जैसी बहुबाइट वर्ण, सही ढंग से एन्कोड नहीं किए जाएंगे। इसलिए, हमें एन्कोडिंग शुरू होने से पहले मौजूदा लोकेल के यूनिकोड वर्णों को बाइट में कनवर्ट करने के लिए स्ट्रिंग्स के getBytes () विधि का उपयोग करना चाहिए। लेकिन उदाहरण के लिए, यदि आप एक अमेरिकी अंग्रेजी लोकेल के साथ जापानी दस्तावेज़ पर काम कर रहे हैं, तो आपको GetBytes () आउटपुट के लिए लोकेल निर्दिष्ट करना होगा, जैसे कि GetBytes ("UTF-8")।
  • 5
    देखते हैं कि कितने पैडिंग बाइट्स की आवश्यकता है। जावा मॉड्यूल ऑपरेटर इस बिंदु पर उपयोगी है। हम यहाँ हैं, जब हम एक उपनेमका नाम और पैरामीटर भी घोषित करते हैं।
  • 6
    अब हम इनपुट का एक नल पैड बनाने के लिए इस मान का उपयोग करते हैं। ध्यान दें कि यदि कोई पैडिंग की आवश्यकता नहीं है, तो कुछ भी नहीं जोड़ा गया है, क्योंकि हम मॉड्यूल 3 को दूसरी बार चलाएंगे, 3 में 0 करना होगा।
    सार्वजनिक स्थिर बाइट [] zeroPad (पूर्णांक लंबाई, बाइट [] बाइट्स) {बाइट [] गद्देदार = नए बाइट [लंबाई] - // JVMSystem.arraycopy से शून्य करने के लिए प्रारंभ (बाइट्स, 0, गद्देदार, 0, bytes.length) - रिटर्न पैड-} सार्वजनिक स्टेटिक स्ट्रिंग एन्कोड (स्ट्रिंग स्ट्रिंग) {स्ट्रिंग एन्कोडेड = ""-बाइट [] स्ट्रिंग एरे-कोशिश {stringArray = string.getBytes ("UTF-8") - // उचित स्ट्रिंग एन्कोडिंग} पकड़ का उपयोग (अपवाद पर ध्यान नहीं दिया) {stringArray string.getBytes = () - // स्थानीय उपयोग के लिए डिफ़ॉल्ट बल्कि कर्कश paddingCount से} पूर्णांक = (3 - (stringArray.length% 3))% 3 stringArray = zeroPad (स्ट्रिंगअरेरे। लैंप + पैडिंगकाउंट, स्ट्रिंग एरे) -
  • 7
    अब हम इस मुद्दे पर पहुंचे: हम 3 बाइट्स को एक बार में 24-बिट पूर्णांक में पैक करते हैं, फिर एन्कोडिंग स्ट्रिंग में 6-बिट इंडेक्स को निकालें। ये संख्या जादू नहीं है: 24 को 6 से 4 में विभाजित किया गया है, और 6 बिट्स में 0 से 63 तक के मूल्य हो सकते हैं, जो किसी 64-बिट एन्कोडिंग स्ट्रिंग में किसी भी मान को इंडेक्स कर सकता है।
    के लिए (int i = 0- i < stringArray.length- i + = 3) {int j = ((स्ट्रिंग एरेरे [i] & 0xff) << 16) + ((स्ट्रिंगअरेरे [i + 1] & 0xff) << 8) + (स्ट्रिंगअरेरे [i + 2] & 0xff) -इन्कोड = एन्कोडेड + बेस 64 कोड.चार्ट ((जे > 18) & 0x3f) + base64code.charAt ((जे > 12) & 0x3f) + base64code.charAt ((जे > 6) & 0x3f) + base64code.charAt (जे & 0x3F) -}



  • 8
    अंत में, हम पैडिंग के बाद आउटपुट को पैक करते हैं, सीआरएलएफ को आवश्यक 76-बाइट के अंत में डालें, स्पष्टता के लिए एक सब-रूटिन का उपयोग कर।
    रिटर्न स्प्लिट लाइन्स (एन्कोडेड.substring (0, एन्कोडेड. लैंघ () - पैडिंगकाउंट) +"==".substring (0, पैडिंगकाउंट)) -} सार्वजनिक स्थिर स्ट्रिंग स्प्लिट लाइन्स (स्ट्रिंग स्ट्रिंग) {स्ट्रिंग लाइन = ""-for (int i = 0- i < string.length () - मैं + = splitLinesAt) {+ = string.substring लाइनों (i, Math.min (string.length (), मैं splitLinesAt +)) - + = लाइनों " R n"-} वापसी लाइन-}
  • 9
    यदि हम चाहते हैं, तो हम परीक्षण के लिए एक मुख्य दिनचर्या जोड़ सकते हैं। यह आमतौर पर आपके कोड को जनता के लिए उपलब्ध कराने से पहले एक अच्छा विचार है
    सार्वजनिक स्थिर शून्य मुख्य (स्ट्रिंग [] आर्ग्स) {for (int i = 0- i < args.length-i ++) {System.err.println ("एन्कोडिंग "" + आर्ग्स [आई] + """) -System.out.println (एनकोड (args [i])) -}}
  • 10
    यहां पूरा प्रपत्र है:

    सार्वजनिक कक्षा बेस64 {निजी स्थिर अंतिम स्ट्रिंग base64code = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"+ "abcdefghijklmnopqrstuvwxyz" + "0123456789" + "+ /"-private स्थिर अंतिम पूर्णांक = 76 splitLinesAt-सार्वजनिक स्थिर बाइट [] zeroPad (पूर्णांक लंबाई, बाइट [] बाइट्स) {बाइट [] गद्देदार = नए बाइट [लंबाई] - // JVMSystem.arraycopy (बाइट्स, 0 से शून्य करने के लिए प्रारंभ, गद्देदार, 0, बाइट्स। लम्बाई) -पेटेड-} सार्वजनिक स्थिर स्ट्रिंग एन्कोड (स्ट्रिंग स्ट्रिंग) {स्ट्रिंग एन्कोडेड = ""-बाइट [] स्ट्रिंग एरे-कोशिश {stringArray = string.getBytes ("UTF-8") - // उचित एन्कोडिंग स्ट्रिंग का उपयोग} पकड़ने (अपवाद पर ध्यान नहीं दिया) {stringArray string.getBytes = () - // बल्कि कर्कश से} स्थानीय डिफ़ॉल्ट का उपयोग // कितने बाइट्स गद्दी outputint paddingCount = (3 में जोड़ने के लिए निर्धारित - (stringArray.length% 3))% 3 - आवश्यक // inputstringArray = zeroPad (stringArray.length + paddingCount, stringArray) के लिए किसी भी गद्दी जोड़ने - // प्रक्रिया एक समय में 3 बाइट्स, चार उत्पादन बाइट्स // चिंता के बारे में मंथन सीआरएलएफ़ प्रविष्टि के लिए बाद में (इंट आई = 0- i < stringArray.length- i + = 3) {int j = ((स्ट्रिंग एरेरे [i] & 0xff) << 16) + ((स्ट्रिंगअरेरे [i + 1] & 0xff) << 8) + (स्ट्रिंगअरेरे [i + 2] & 0xff) -इन्कोड = एन्कोडेड + बेस 64 कोड.चार्ट ((जे > 18) & 0x3f) + base64code.charAt ((जे > 12) & 0x3f) + base64code.charAt ((जे > 6) & 0x3f) + base64code.charAt (जे & 0x3f) -} // के साथ एन्कोडेड पैडिंग नल की जगह "="रिटर्न स्प्लिट लाइन्स (एन्कोडेड.substring (0, एन्कोडेड.लैम्थ () -पैडिंगकाउंट) + "==".substring (0, पैडिंगकाउंट)) -} सार्वजनिक स्थिर स्ट्रिंग स्प्लिट लाइन्स (स्ट्रिंग स्ट्रिंग) {स्ट्रिंग लाइन = ""-for (int i = 0- i < string.length () - मैं + = splitLinesAt) {+ = string.substring लाइनों (i, Math.min (string.length (), मैं splitLinesAt +)) - + = लाइनों " R n"-} वापसी लाइन-} सार्वजनिक स्थिर शून्य मुख्य (स्ट्रिंग [] args) {for (int i = 0- i < args.length-i ++) {System.err.println ("एन्कोडिंग "" + आर्ग्स [आई] + """) -System.out.println (एनकोड (args [i])) -}}}
  • 11
    इसे संकलित करें, javac, gcj, jikes, या जो भी आप पसंद करते हैं - और इसका परीक्षण करते हैं, विकिपीडिया लेख से होब्स बोली का उपयोग करते हुए:
    $ जीसीजे-सी बेस64.जावा $ जावा बेस 64 "यह इसके लिए एकमात्र कारण नहीं है, लेकिन यह केवल उनके कारण ही नहीं है, बल्कि अन्य जानवरों द्वारा भी है, जो मन की लालसा है।"
  • 12
    यहां परिणाम है:

    एन्कोडिंग "यह इसके लिए एकमात्र कारण नहीं है, लेकिन यह केवल उनके कारण ही नहीं है, बल्कि अन्य जानवरों से इस व्यक्तित्व से है, जो मन की लालसा है।"TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGludWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4 =
  • 13
    बिल्कुल अनुरूप! इसका अर्थ यह है कि दोनों कार्यक्रम गलत हैं या वे अधिक या कम सही हैं। इस बिंदु पर आप विकिपीडिया लेख की समीक्षा करना चाहेंगे, और यह जांचने के लिए कनेक्टेड आरएफसी पढ़ें कि आप कुछ भी नहीं भूल गए हैं।
  • टिप्स

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

    संबद्ध

    © 2011—2022 GnuMani.com