2012-02-01 8 views
6

Sto cercando di capire quanto segue:Perché C# Convert.ToBase64String() mi dà 88 come lunghezza quando sto passando 64 byte?

Se sto dichiarando 64 byte come lunghezza dell'array (buffer). Quando converto in una stringa 64 di base, si dice che la lunghezza è 88. Non dovrebbe essere la lunghezza solo 64, dal momento che sto passando in 64 byte? Potrei essere totalmente frainteso come funziona questo reale. Se è così, potresti spiegarlo per favore.

//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: lanciare un'eccezione è un modo terribile per registrare un valore semplice ... –

+0

Non userò la Crittografia RGN personalmente, Un RNG crittograficamente forte sarà più lento --- richiede più calcolo --- e sarà spettralmente bianco, – MethodMan

+0

Guarda questo StackOverFlow Spiegazione del motivo per cui non è sicuro usare RGN http://stackoverflow.com/questions/4892588/rngcryptoserviceprovider-random-number-review – MethodMan

risposta

8

No, la codifica in base 64 utilizza un intero byte per rappresentare sei bit dei dati codificati. I due bit persi sono il prezzo di usare solo caratteri alfanumerici, più e barre come simboli (in pratica, escludendo i numeri che rappresentano caratteri non visibili o speciali nella codifica ASCII/UTF-8 normale). Il risultato che si ottiene è (64 * 4/3) arrotondato al limite di 4 byte più vicino.

6

La codifica Base64 converte 3 ottetti in 4 caratteri codificati; quindi

(64/3) * 4 ≈ (22 * 4) = 88 byte.

Read here.

2

Non dovrebbe la lunghezza essere solo 64, dal momento che sto passando in 64 byte?

No. Si stanno passando 64 token in notazione Base256. Base64 ha meno informazioni per token, quindi necessita di più token. 88 suona bene.

Problemi correlati