Domanda

Se ho una stringa di 32 caratteri (un hash MD5) e ho codificare usando Base64, che cosa è la lunghezza massima della stringa codificata?

È stato utile?

Soluzione

Un valore MD5 è sempre lungo 22 (utili) caratteri in Base64 notazione. Molti algoritmi Base64 anche accodamento 2 caratteri di riempimento quando codificante un hash MD5, per un totale di 24 caratteri. L'imbottitura aggiunge alcuna informazione utile e può essere scartato. Solo i primi 22 caratteri sono importanti.

Ecco perché:

Un hash MD5 è un valore a 128 bit. Ogni carattere di una stringa Base64 contiene 6 bit di informazioni, perché ci sono 64 possibili valori per il personaggio, e ci vogliono 6 potenze di 2 per raggiungere 64. Con 6 bit di informazioni in ogni personaggio, 21 caratteri ha 126 bit di informazione, e 22 caratteri contiene 132 bit di informazione. Poiché 128 bit non possono adattarsi entro 21 caratteri ma si colloca la raggio di 22 caratteri (con un piccolo spazio libero), un valore di 128 bit sarà sempre rappresentato come 22 caratteri in base64.

Una nota sul padding:

ho già detto che molti Base64 algoritmi di codifica aggiungere un paio di caratteri di riempimento durante la codifica un valore MD5. Questo perché Base64 rappresenta 3 byte di informazioni 4 caratteri. Poiché MD5 ha 16 byte di informazioni, molti algoritmi codifica base64 aggiungono "==" per indicare che l'ingresso di 16 byte è 2 byte corto del prossimo multiplo di 3, che sarebbe stato 18 byte. Questi 2 segni di uguale aggiungere alcuna informazione alla stringa, e possono essere scartati quando si ripone.

Altri suggerimenti

Come per http://en.wikipedia.org/wiki/Base64

"Si noti che dato un input di n byte, l'uscita sarà (n + 2 - ((n + 2)% 3)) / 3 * 4 byte lunghi, che converge per n * 4/3 o 1.33333n per n grande ".

Quindi, sarà ((32 + 2 - (32 + 2)% 3)) / 3 * 4 = 34 - (34% 3) / 3 * 4 = (34 - 1) / 3 * 4 = 33/3 * 4 = 44 caratteri.

Si potrebbe ricavare sempre in forma grezza binaria (128 bit) e codificare direttamente in base 64, i quali mezzi di conversione di 16 byte invece di 32, che diventa 24 byte quando codificato base 64.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top