2012-02-01 62 views
6

我想了解以下內容:爲什麼C#Convert.ToBase64String()給我88作爲一個長度,當我傳遞64個字節?

如果我聲明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

Btw:拋出一個異常是一種可怕的方式來記錄一個簡單的值... – 2012-02-01 20:40:52

+0

我不會親自使用RGN加密,密碼強大的RNG將會更慢 - 它需要更多的計算---並將光譜白色, – MethodMan 2012-02-01 20:44:37

+0

看看這個StackOverFlow解釋爲什麼它不安全使用RGN http://stackoverflow.com/questions/4892588/rngcryptoserviceprovider-random-number-review – MethodMan 2012-02-01 20:46:58

回答

8

不,base-64編碼使用整個字節來表示正在編碼的數據的六位。丟失的兩位是僅使用字母數字,加號和斜槓作爲符號的價格(基本上,不包括以純ASCII/UTF-8編碼表示不可見或特殊字符的數字)。你得到的結果是(64 * 4/3)四捨五入到最接近的4字節邊界。

6

Base64編碼將3個八位字節轉換爲4個編碼字符;因此,

(64/3)* 4≈(22 * 4)= 88字節。

Read here.

2

不宜長度只能是64,因爲我在經過64個字節?

不會。您正在Base256符號中傳遞64個令牌。 Base64每個令牌的信息較少,所以需要更多的令牌。 88聽起來很正確。

相關問題