Solución:
32 caracteres como representación hexadecimal, eso es 2 caracteres por byte.
Quería resumir algunas de las respuestas en una publicación.
Primero, no piense en el hash MD5 como una cadena de caracteres, sino como un número hexadecimal. Por lo tanto, cada dígito es un dígito hexadecimal (0-15 o 0-F) y representa cuatro bits, no ocho.
Yendo más allá, un byte u ocho bits están representados por dos dígitos hexadecimales, por ejemplo, b ‘1111 1111
‘= 0xFF
= 255
.
Los hash MD5 tienen una longitud de 128 bits y generalmente están representados por 32 dígitos hexadecimales.
Los hash SHA-1 tienen 160 bits de longitud y generalmente se representan con 40 dígitos hexadecimales.
Para la familia SHA-2, creo que la longitud del hash puede ser una de un conjunto predeterminado. Entonces, SHA-512 se puede representar con 128 dígitos hexadecimales.
Nuevamente, esta publicación se basa solo en respuestas anteriores.
Un “carácter” hexadecimal (nibble) es diferente de un “carácter”
Para ser claros sobre los bits frente a bytes, frente a caracteres.
- 1 byte son 8 bits (para nuestros propósitos)
- 8 bits proporciona
2**8
posibles combinaciones: 256 combinaciones
Cuando miras un carácter hexadecimal,
- 16 combinaciones de
[0-9] + [a-f]
: la gama completa de0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f
- 16 es menor que 256, por lo que un carácter hexadecimal no no almacenar un byte.
- 16 es
2**4
: eso significa que un carácter hexadecimal puede almacenar 4 bits en un byte (medio byte). - Por lo tanto, dos caracteres hexadecimales pueden almacenar 8 bits,
2**8
combinaciones. - Un byte representado como un carácter hexadecimal es
[0-9a-f][0-9a-f]
y eso representa las dos mitades de un byte (a un medio byte lo llamamos nibble).
Cuando miras un carácter regular de un solo byte, (vamos a omitir totalmente los caracteres multibyte y anchos aquí)
- Puede almacenar más de 16 combinaciones.
- Las capacidades del personaje están determinadas por el codificación. Por ejemplo, la ISO 8859-1 que almacena un byte completo, almacena todas estas cosas
- Todo eso toma todo
2**8
distancia. - Si un carácter hexadecimal en un
md5()
podría almacenar todo eso, verías todas las letras minúsculas, todas las letras mayúsculas, toda la puntuación y cosas como¡°ÀÐàð
, espacios en blanco como (líneas nuevas y pestañas) y caracteres de control (que ni siquiera puede ver y muchos de los cuales no están en uso).
Entonces son claramente diferentes y espero que eso proporcione el mejor desglose de las diferencias.