Quei hash non sono ASCII-il motivo che si vede cifre esadecimali è perché il software utilizzato per generarli prende l'uscita binaria del digest e lo trasforma in una stringa ASCII di cifre esadecimali.
Ad esempio, il digest MD5 riempie una matrice di 16 byte. Puoi anche rappresentarlo come una stringa di 32 caratteri, ma la forma più elementare del digest è ancora l'array di byte.
Quando si modifica una matrice di byte in una stringa esadecimale, sono necessari 8 bit (un carattere completo) per rappresentare ogni 4 bit di dati. Anche se non viene spesso chiamato in questo modo, si potrebbe dire che questo utilizza la codifica "base16", dal momento che stai acquisendo 4 bit alla volta e li stai mappando su un alfabeto di 16 caratteri.
Base64, d'altra parte, prende 6 bit alla volta e li mappa in un alfabeto di 64 caratteri. Ciò significa che sono necessari 8 bit (di nuovo, un carattere completo) per rappresentare ogni 6 bit di dati, che ha metà dei bit sprecati di base16. Una stringa con codifica Base16 sarà sempre due volte più grande dell'originale; una stringa con codifica Base64 sarà grande solo di quattro terzi. Per un hash SHA256, base16 fa 64 byte, ma base64 fa circa 43.
che risponde alla mia domanda. grazie! – tuna
@zneak È lo spazio efficiente il motivo per utilizzare la codifica Base 64 su un hash. Non è necessario che se abbiamo bisogno di inviare questo hash abbiamo bisogno che l'hash sia rappresentabile come testo e Base64 lo fa limitando i dati binari a un set di 64 personaggi per lo più sovrapposti dalla maggior parte delle codifiche comuni? – crackerplace
@zneak Voglio dire dando l'hash una forma presentabile su qualsiasi computer. – crackerplace