La salida de MD5 es binaria: una secuencia de 128 bits, comúnmente codificada como 16 bytes (técnicamente, 16 octetos , pero usemos la convención común de bytes que son octetos).
Los humanos no leen bits o bytes. Ellos leen caracteres . Existen numerosas páginas de códigos que indican cómo codificar caracteres como bytes y, de manera similar, para decodificar bytes en caracteres. Para casi todos (debido a ASCII ), los bytes de bajo valor (0 a 31) son "caracteres de control" , por lo tanto no son realmente representables como personajes. Así que nadie realmente lee la salida MD5 directamente. Si alguien está "leyendo" los valores hash, entonces estos valores probablemente estén codificados en caracteres usando una de las pocas convenciones comunes para eso. Las dos convenciones más frecuentes son hexadecimal y Base64 .
Con hexadecimal, solo hay dígitos, y las letras 'a' a 'f' (tradicionalmente en minúsculas para valores hash). No obtendrás "SALT ME!" en una salida hexadecimal ...
Con Base64, la codificación usa las 26 letras latinas no acentuadas (tanto en minúscula como en mayúscula), los dígitos y los signos '+' y '/'. Por lo tanto, se puede esperar para "SaltMe" o "SALTME". Ahora eso es factible, porque cada carácter en Base64 codifica 6 bits, por lo que una salida de 6 letras corresponde a 36 bits solamente. La búsqueda de una contraseña que produzca "SaltMe" o "SALTME" se realizará en (en promedio) 235 intentos, es decir, en unos pocos minutos u horas con algunos decentes código optimizado.
Tenga en cuenta, sin embargo, que alguien que realmente dedica un tiempo a leer valores hash codificados en Base64 probablemente tenga algunos, digamos, "problemas sociales", y como tal no reaccione de la forma que usted espera.
Y se hace: cuando se hace hashing con MD5, se codifica en base64 el resultado:
-
infjfieq
de rendimientos: SALTMEnBrODYbFY0c/tf+Q==
-
lakvqagi
de rendimientos: SaltMe+neeRdUB6h99kOFQ==