2012-02-01 25 views
6

मैं निम्नलिखित को समझने की कोशिश कर रहा हूं:सी # कन्वर्ट क्यों करें। ToBase64String() मुझे 88 बाइट्स में गुजरने पर मुझे लंबाई के रूप में 88 देता है?

यदि मैं सरणी लंबाई (बफर) के रूप में 64 बाइट्स घोषित कर रहा हूं। जब मैं बेस 64 स्ट्रिंग में कनवर्ट करता हूं, तो यह कहता है कि लंबाई 88 है। क्या लंबाई केवल 64 होनी चाहिए, क्योंकि मैं 64 बाइट्स में गुजर रहा हूं? मैं पूरी तरह से गलत समझ सकता हूं कि यह वास्तविक काम कैसे करता है। यदि हां, तो क्या आप कृपया समझा सकते हैं।

//Generate a cryptographic random number 
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider(); 

// Create byte array 
byte[] buffer = new byte[64]; 

// Get random bytes 
rng.GetBytes(buffer); 

// This line gives me 88 as a result. 
// Shouldn't it give me 64 as declared above? 
throw new Exception(Convert.ToBase64String(buffer).Length.ToString()); 

// Return a Base64 string representation of the random number 
return Convert.ToBase64String(buffer); 
+4

बीटीडब्ल्यू: एक अपवाद फेंकना एक साधारण मूल्य लॉग करने का एक भयानक तरीका है ... –

+0

मैं व्यक्तिगत रूप से आरजीएन एन्क्रिप्शन का उपयोग नहीं करता, एक क्रिप्टोग्राफिक रूप से मजबूत आरएनजी धीमा हो जाएगा --- इसमें अधिक गणना होती है --- और स्पेक्ट्रल सफेद, – MethodMan

+0

इस StackOverFlow स्पष्टीकरण को देखें कि आरजीएन का उपयोग सुरक्षित क्यों नहीं है http://stackoverflow.com/questions/4892588/rngcryptoserviceprovider-random-number-review – MethodMan

उत्तर

8

नहीं, बेस -64 एन्कोडिंग एन्कोड किए गए डेटा के छः बिट्स का प्रतिनिधित्व करने के लिए एक संपूर्ण बाइट का उपयोग करता है। खोए गए दो बिट्स केवल आपके अक्षर के रूप में केवल अल्फान्यूमेरिक, प्लस और स्लैश का उपयोग करने की कीमत है (मूल रूप से, संख्याओं को छोड़कर जो दृश्यमान या सादे ASCII/UTF-8 एन्कोडिंग में विशेष वर्ण नहीं हैं) को छोड़कर। परिणाम जो आप प्राप्त कर रहे हैं वह है (64 * 4/3) निकटतम 4-बाइट सीमा तक गोलाकार है।

6

बेस 64 एन्कोडिंग 3 ऑक्टेट्स को 4 एन्कोडेड वर्णों में परिवर्तित करता है; इसलिए

(64/3) * 4 ≈ (22 * 4) = 88 बाइट्स।

Read here.

2

लंबाई केवल 64 हो नहीं करना चाहिए, के बाद से मैं 64 बाइट्स में गुजर रहा हूँ?

नहीं। आप बेस256 नोटेशन में 64 टोकन पास कर रहे हैं। बेस 64 में टोकन प्रति कम जानकारी है, इसलिए इसे अधिक टोकन की आवश्यकता है। 88 सही के बारे में लगता है।