2012-07-23 34 views
8

को बाइट सरणी परिवर्तित org.apache.commons.codec.binary.Base64 यह मेरा जावा कोड का उपयोग कर की तरह लग रहा ..For base64 स्ट्रिंग के लिए एक byte[] कन्वर्ट करने के लिए कोशिश कर रहा है:base64 स्ट्रिंग जावा

base64String = Base64.encodeBase64URLSafeString(myByteArray); 

लेकिन कुछ उत्पन्न base64 में अमान्य वर्ण क्या मैं देख रहा है स्ट्रिंग .. ScreenShot

मैं अपने उत्पन्न base64 स्ट्रिंग में इन ____ लाइनों को क्यों देखूं? क्या यह एक वैध स्ट्रिंग है? ध्यान दें कि उत्पन्न स्ट्रिंग की लंबाई चार से विभाजित है।

+1

आप अपने उत्पादन डिकोडिंग की कोशिश की थी? साथ ही, आप एक यूआरएल में एन्कोडेड बेस 64 डेटा का उपयोग कर रहे हैं। URLSafe संस्करण का उपयोग केवल तभी करें जब बेस 64 एन्कोडिंग http/get या कुछ अन्य यूआरएल से संबंधित ऑपरेशन में हो। – maasg

+0

http://en.wikipedia.org/wiki/Base64#URL_applications – nullpotent

+0

यह http://stackoverflow.com/questions/6265912/javax-xml-binds-base64-encoder-decoder-eats-last-two- अक्षर-के-स्ट्रिंग – tsm

उत्तर

2

यह

sun.misc.BASE64Encoder encoder = new sun.misc.BASE64Encoder(); 
encoder.encode(byteArray); 
+14

यह बुरी सलाह है --- 'sun.misc' पैकेज पदानुक्रम सार्वजनिक उपयोग के लिए नहीं है। –

+0

मैं 'sun.misc' –

0

आप मिल गया है (कम से कम) बेस 64 के दो जायके, मूल एक '+' और '/' अक्षरांकीय अक्षर के अलावा का उपयोग कर, और "यूआरएल सुरक्षित सहायक हो सकता है "एक," - "और" _ "का उपयोग करके ताकि सामग्री को एक यूआरएल में संलग्न किया जा सके (या फाइलनाम, बीटीडब्ल्यू के रूप में इस्तेमाल किया जा सके)।

ऐसा लगता है कि आप एक बेस 64 एनकोडर कि "Url-सुरक्षित मोड" में बदल दिया गया उपयोग कर रहे हैं।

apache's javadoc for URLSafeString()

ओह, और '_', बेस 64 वर्णमाला के अंतिम वर्ण जा रहा है "____" के तार देखकर मतलब है कि आप 0xffffff का हिस्सा एन्कोडिंग किया गया है ..., बस "AAAAAA" देखने जैसा वहाँ की एक बहुत कुछ का मतलब लगातार शून्य।

आप को विश्वास है कि यह एक सामान्य बात है होना चाहते हैं, बस अपने पसंदीदा हेक्साडेसिमल डम्पर/संपादक लेने और क्या अपने द्विआधारी इनपुट की तरह देखा की जाँच करें।

+0

के साथ नहीं जाना चाहता हूं सभी हां में एक वैध टिप्पणी दिखती है मुझे'/'मिल गया है और स्लैश से बचने के लिए 'एनकोडबेस 6464SafeString' के साथ पारिस्थितिक विधि को दोहराया .. फिर यह सब' _' से शुरू हुआ .. मुझे बस इतना पता होना चाहिए कि उपर्युक्त वैध बेस 64 स्ट्रिंग है? कृपया सुझाव दें। –

+0

आप पूछ रहे हैं कि स्ट्रिंग मैचों [0-9 ए-जेए-जे _ _] + या [0-9 ए-ज़ा-जेड/+] + से मेल खाती है? यह एक regexp के लिए एक नौकरी की तरह लगता है। – PypeBros

0

नीचे प्रक्रिया आप Base64 को बाइट सरणी में बदल सकते हैं द्वारा

// Convert a byte array to base64 string 
    byte[] bytearray= new byte[]{0x12, 0x23}; 
    String s = new sun.misc.BASE64Encoder().encode(bytearray); 

    // Convert base64 string to a byte array 
    bytearray = new sun.misc.BASE64Decoder().decodeBuffer(s); 

संपादित करें:

कृपया लिंक नीचे गाइड के लिए जाँच commons apache

+0

'sun.misc.BASE64Decoder()' ?? अपाचे कॉमन्स –

+2

के साथ क्यों प्रयास कर रहा है sun.misc जावा/जावैक्स पैकेज के सूर्य के कार्यान्वयन के लिए कुछ आंतरिक है। इस बात की कोई गारंटी नहीं है कि यह हमेशा रहेगा (एक अलग जेवीएम पर esp।) और न ही यह इंटरफ़ेस JVM, afaik की विभिन्न रिलीज़ में समान रहेगा। – PypeBros

2

है आप encodeBase64String विधि के साथ करने की कोशिश की encodeBase64URLSafeString का उपयोग करने के बजाय?

encodeBase64URLSafeString:

base64 एल्गोरिथ्म एक URL- सुरक्षित परिवर्तन का उपयोग बाइनरी डेटा को एन्कोड नहीं बल्कि हिस्सा उत्पादन करता है। यूआरएल-सुरक्षित विविधता उत्सर्जित होती है - और + और/वर्णों के बजाय _ ।

encodeBase64String:

बेस 64 कलन विधि का उपयोग बाइनरी डेटा को एन्कोड नहीं बल्कि हिस्सा उत्पादन करता है। नोट: हमने इस विधि के व्यवहार को मल्टी-लाइन चंकिंग (कॉमन्स-कोडेक-1.4) से सिंगल-लाइन गैर-चंकिंग (कॉमन्स-कोडेक-1.5) में बदल दिया है।

स्रोत: org.apache.commons.codec.binary.Base64 javadoc

0

उपयोग

String sCert = javax.xml.bind.DatatypeConverter.printBase64Binary(pk);