Pregunta

Si tengo una cadena de 32 caracteres (un hash MD5) y codificarlo base 64, lo que es la longitud máxima de la cadena codificada?

¿Fue útil?

Solución

Un valor MD5 es siempre 22 caracteres (útiles) de largo en notación Base64. Muchos algoritmos Base64 también append 2 caracteres de relleno cuando se codifica un hash MD5, para un total de 24 caracteres. El relleno no añade ninguna información útil y puede ser desechada. Sólo los primeros 22 caracteres son importantes.

Esta es la razón:

Un hash MD5 es un valor de 128 bits. Cada carácter en una cadena base 64 contiene 6 bits de información, porque hay 64 valores posibles para el personaje, y tarda 6 potencias de 2 para llegar a 64. Con 6 bits de información en todos los caracteres, 21 caracteres tiene 126 bits de información, y 22 caracteres contiene 132 bits de información. Desde 128 bits no pueden encajar dentro de 21 caracteres pero encaja dentro de 22 caracteres (con un poco de espacio de sobra), un valor de 128 bits siempre se representará como 22 caracteres en Base64.

Una nota sobre el relleno:

he mencionado anteriormente que muchos algoritmos de codificación Base64 añaden un par de caracteres de relleno cuando codifica un valor MD5. Esto se debe a base 64 representa 3 bytes de información como 4 caracteres. Desde MD5 tiene 16 bytes de información, muchos algoritmos de codificación Base64 añadir "==" para designar que la entrada de 16 bytes fue de 2 bytes corto de la siguiente múltiplo de 3, lo que habría sido de 18 bytes. Estos 2 signos iguales añadir ningún tipo de información a la cadena, y pueden ser descartados cuando se almacenan.

Otros consejos

Según http://en.wikipedia.org/wiki/Base64

"Nota que dada una entrada de N bytes, la salida será (n + 2 - ((n + 2)% 3)) / 3 * 4 bytes de largo, que converge a n * 4/3 o 1.33333n para n grande ".

Así, será ((32 + 2 - (32 + 2)% 3)) / 3 * 4 = 34 - (34% 3) / 3 * 4 = (34 - 1) / 3 * 4 = 33/3 * 4 = 44 caracteres.

Siempre se puede extraer en forma cruda binario (128 bits) y codificar directamente en la base 64, que medios de conversión de 16 bytes en lugar de 32, que se convierte en 24 bytes cuando la base 64 codificada.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top