Como han respondido otros, las funciones hash (todas ellas, incluidas MD5, SHA-256, Whirlpool y las docenas de otras funciones) generan bits . La salida de MD5 es de 128 bits. Sin embargo, los humanos son malos en la lectura de bits. Los humanos son buenos para leer caracteres . Por lo tanto, cuando la salida de una función hash está destinada al consumo humano, se convierte en caracteres con alguna codificación.
Hexadecimal es una de las codificaciones más simples de bits en caracteres. Convierte una parte de cuatro bits en un dígito o un carácter en el rango 'a' a 'f'. Existen otras codificaciones, p. Ej. Base64 , que utiliza un alfabeto más grande (64 signos en lugar de 16) y es más compacta (la salida de 128 bits de MD5 está codificado como 24 caracteres en Base64, vs 32 en hexadecimal), pero es un poco más complejo de implementar.
Hay muchas variantes posibles con hexadecimal; p.ej. podemos agregar algunos espacios cada pocos caracteres (para facilitar la lectura) u otra puntuación como los signos de dos puntos (':'); Podemos usar letras mayúsculas o minúsculas. Tradición para las salidas de la función hash es usar minúsculas sin espacio ni puntuación. Esta tradición ya estaba vigente en la infancia de MD5: MD5 fue diseñado en 1991, publicado en abril de 1992 como RFC 1321 ; Como puede ver en ese documento (cerca del final, sección A.5), las salidas de hash ya usan hexadecimales en minúsculas.