2012-07-24 16 views
24

लिए मैं कोशिश कर रहा हूँ:रूपांतरण और वापस

  1. एक बाइट सरणी उत्पन्न करें।
  2. उस बाइट सरणी को बेस 64
  3. कनवर्ट करें कि बेस 64 स्ट्रिंग को बाइट सरणी में वापस कनवर्ट करें।

मैंने कुछ समाधानों का प्रयास किया है, उदाहरण के लिए इस question में।

कुछ कारणों से प्रारंभिक और अंतिम बाइट सरणी मेल नहीं खाते हैं। यहाँ कोड प्रयोग किया जाता है:

using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider()) 
    { 
     byte[] originalArray = new byte[32]; 
     rng.GetBytes(key); 
     string temp_inBase64 = Convert.ToBase64String(originalArray); 
     byte[] temp_backToBytes = Encoding.UTF8.GetBytes(temp_inBase64); 
    } 

मेरे प्रश्न हैं:

  1. क्यों है "originalArray" और "temp_backToBytes" से मेल नहीं? (originalArray की लंबाई 32 है, temp_backToBytes की लंबाई 44 है, लेकिन उनके मान भी अलग हैं)

  2. क्या आगे और पीछे परिवर्तित करना संभव है, और यदि हां, तो मैं इसे कैसे पूरा करूं?

उत्तर

30

कारण इनकोडिंग सरणी एक चौथाई के बारे में द्वारा लंबे समय तक है कि आधार -64 एन्कोडिंग हर बाइट में से केवल छह बिट्स का उपयोग करता है; यह अस्तित्व का कारण है - संभवतः शून्य और अन्य गैर-प्रिंट करने योग्य पात्रों के साथ मनमाने ढंग से डेटा को एन्कोड करने के लिए, ईएससीआईआई-केवल चैनलों जैसे कि ई-मेल के माध्यम से विनिमय के लिए उपयुक्त है।

जिस तरह से आप Convert.FromBase64String का उपयोग करके वापस अपने मूल है सरणी मिल:

byte[] temp_backToBytes = Convert.FromBase64String(temp_inBase64); 
+0

यही काम किया, हालांकि अगर बेस 64 केवल का उपयोग करता है 6 हर 8 बिट से बाहर है, मुझे लगता है कि होगा एन्कोडिंग कम हो सकता है? – crawfish

+6

@ क्रॉफिश एन्कोडिंग आउटपुट में आठ बिट्स में से छह का उपयोग करता है, जिससे दो सबसे महत्वपूर्ण लोग शून्य पर सेट हो जाते हैं। नतीजतन, तीन बाइट्स ('3 * 8 = 24' बिट्स) का प्रत्येक समूह चार बाइट्स (' 4 * 6 = 24' बिट्स) का समूह बन जाता है। यदि मूल में बाइट्स की संख्या तीन से विभाजित नहीं है, तो विशेष मार्कर अंत में जोड़े जाते हैं। आपके मामले में, 32 से 3 से अधिक की अगली संख्या 33, या '11 * 3' है। इसका मतलब है कि परिणाम '11 * 4', या 44 बाइट लंबा है। – dasblinkenlight

+0

स्पष्टीकरण – crawfish

संबंधित मुद्दे