2010-03-12 4 views
11

Sto facendo un hash MD5, e vogliono solo per assicurarsi che il risultato di:Il risultato di un hash md5 è consistente o dipende dal server?

md5.ComputeHash(bytePassword); 

è coerente indipendentemente dal server?

ad es. finestre 2003/2008 e 32/64 bit ecc

+3

Stai facendo un hash MD5 per oscurare le password nel tuo database? Non si dovrebbe http://wblinks.com/notes/storing-passwords-the-wrong-better-and-even-better-way – gingerbreadboy

risposta

18

Sì, è coerente, il md5 algorithm specification definisce esso, indipendentemente dalla piattaforma.

+3

Solo che ho visto alcuni sistemi rappresentano l'uscita con lettere maiuscole e alcune con minore lettere maiuscole. Se stai confrontando la rappresentazione della stringa dell'output, assicurati di fare un confronto senza distinzione tra maiuscole e minuscole. –

+2

Stai mescolando la rappresentazione esadecimale (-> String) con il valore MD5 (-> Numerico) e fai un confronto tra stringhe? In tal caso potrebbe accadere che i caratteri esadecimali validi siano in minuscolo o maiuscolo, ma il valore è lo stesso. In altre parole: se confronti 0xAa a 0xaA e consideri il caso rilevante, allora non stai comparando correttamente e considererei un bug. –

+0

Qui il caso è irrilevante, poiché il metodo restituisce una matrice di byte - se vuole convertirlo in una stringa che rappresenta i byte come valori esadecimali, allora sarebbe importante. – BrainSlugs83

1

hashing MD5 è [sistema/tempo/nulla, tranne l'ingresso] indipendente

3

Il risultato di un hash MD5 è un numero. Il numero restituito per un determinato input è sempre lo stesso, indipendentemente dal server o dalla piattaforma utilizzata.

Tuttavia, l'espressione numero può variare. Ad esempio, 1 e 1.0 hanno lo stesso numero, ma sono espressi in modo diverso. Allo stesso modo, alcune piattaforme restituiranno l'hash formattato in modo leggermente diverso rispetto ad altri. In questo caso, si dispone di un array di byte, che dovrebbe essere abbastanza sicuro da aggirare. Basta fare attenzione a ciò che si fa dopo averlo convertito in una stringa.

6

MD5 è indipendente dal sistema operativo e l'architettura. Quindi è "coerente".

Tuttavia, MD5 prende come input una sequenza arbitraria di bit e genera una sequenza di 128 bit. In molte situazioni, vuoi stringhe. Ad esempio, si desidera hash una password e la password è inizialmente una stringa. La conversione di quella stringa in una sequenza di bit non fa parte dello stesso MD5 e esistono diverse convenzioni. Non so precisamente di C#, ma il metodo Java equivalente String.getBytes() utilizzerà il "set di caratteri di default della piattaforma" che può variare con l'installazione del sistema operativo. Allo stesso modo, l'output di MD5 viene spesso convertito in una stringa con notazione esadecimale e può essere in lettere maiuscole o minuscole o altro.

Così che, mentre MD5 per sé è coerente, insetti spesso si annidano nelle parti che preparano i dati per MD5 e post-process sua uscita. Attenzione.

+0

In C#/.NET è necessario specificare quale codifica si desidera usa - per esempio: Encoding.UTF8.GetBytes ("Blah"), Encoding.ASCII.GetBytes ("Blah"), Encoding.UTF32.GetBytes ("Blah") ... – BrainSlugs83

Problemi correlati