लिए मैं कोशिश कर रहा हूँ:रूपांतरण और वापस
- एक बाइट सरणी उत्पन्न करें।
- उस बाइट सरणी को बेस 64
- कनवर्ट करें कि बेस 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);
}
मेरे प्रश्न हैं:
क्यों है "originalArray" और "temp_backToBytes" से मेल नहीं? (originalArray की लंबाई 32 है, temp_backToBytes की लंबाई 44 है, लेकिन उनके मान भी अलग हैं)
क्या आगे और पीछे परिवर्तित करना संभव है, और यदि हां, तो मैं इसे कैसे पूरा करूं?
यही काम किया, हालांकि अगर बेस 64 केवल का उपयोग करता है 6 हर 8 बिट से बाहर है, मुझे लगता है कि होगा एन्कोडिंग कम हो सकता है? – crawfish
@ क्रॉफिश एन्कोडिंग आउटपुट में आठ बिट्स में से छह का उपयोग करता है, जिससे दो सबसे महत्वपूर्ण लोग शून्य पर सेट हो जाते हैं। नतीजतन, तीन बाइट्स ('3 * 8 = 24' बिट्स) का प्रत्येक समूह चार बाइट्स (' 4 * 6 = 24' बिट्स) का समूह बन जाता है। यदि मूल में बाइट्स की संख्या तीन से विभाजित नहीं है, तो विशेष मार्कर अंत में जोड़े जाते हैं। आपके मामले में, 32 से 3 से अधिक की अगली संख्या 33, या '11 * 3' है। इसका मतलब है कि परिणाम '11 * 4', या 44 बाइट लंबा है। – dasblinkenlight
स्पष्टीकरण – crawfish