L'output di MD5 è binario: una sequenza di 128 bit, comunemente codificati come 16 byte (tecnicamente, 16 ottetti , ma usiamo la convenzione comune dei byte come ottetti).
Gli umani non leggono bit o byte. Leggono caratteri . Esistono numerose code page che indicano come codificare i caratteri come byte e, analogamente, decodificare i byte in caratteri. Per quasi tutti (a causa di ASCII ), i byte di valore basso (da 0 a 31) sono "caratteri di controllo" , quindi non veramente rappresentabili come personaggi. Quindi nessuno legge realmente l'output MD5 direttamente. Se qualcuno sta "leggendo" i valori hash, questi valori sono probabilmente codificati in caratteri usando una delle poche convenzioni comuni per quello. Le due convenzioni più diffuse sono esadecimale e Base64 .
Con esadecimale, ci sono solo cifre e lettere da "a" a "f" (tradizionalmente minuscole per valori hash). Non otterrai "SALT ME!" in un output esadecimale ...
Con Base64, la codifica utilizza tutte e 26 le lettere latine non accentate (sia minuscole che maiuscole), le cifre e i segni "+" e "/". Potresti così sperare in "SaltMe" o "SALTME". Ora che è fattibile, poiché ogni carattere in Base64 codifica 6 bit, quindi un'uscita di 6 lettere corrisponde solo a 36 bit. Alla ricerca di una password che produca "SaltMe" o "SALTME" verrà eseguito in (in media) 2 35 tentativi, ovvero entro pochi minuti o ore con qualche decente codice ottimizzato.
Si noti, tuttavia, che qualcuno che spende un po 'di tempo per leggere i valori hash codificati Base64 probabilmente ha alcuni, diciamo, "problemi sociali", e come tale potrebbe non reagire nel modo in cui si spera.
Ed è fatto: quando esegui l'hashing con MD5 e poi Base64-codifica il risultato:
-
infjfieq
rese: SALTMEnBrODYbFY0c/tf+Q==
-
lakvqagi
rese: SaltMe+neeRdUB6h99kOFQ==