2010-05-06 11 views
6

Uso l'hash MD5 per identifying files with unknown origin. Nessun attaccante qui, quindi non mi interessa che MD5 sia stato rotto e si possa generare una collisione.Posso utilizzare una parte dell'hash MD5 per l'identificazione dei dati?

Il mio problema è che ho bisogno di fornire la registrazione in modo che i diversi problemi siano diagnosticati più facilmente. Se registro ogni hash come una stringa esadecimale troppo lunga, scomoda e sembra brutta, quindi mi piacerebbe accorciare la stringa hash.

Ora so che basta prendere una piccola parte di un GUID is a very bad idea - I GUID sono progettati per essere unici, ma parte di essi non lo sono.

Lo stesso vale per MD5 - posso dire prima i 4 byte di MD5 e assumere che ho solo una probabilità di collisione più alta a causa del numero ridotto di byte rispetto all'hash originale?

+0

possibile duplicato di http://stackoverflow.com/questions/860405/are-the-first-32-bits-of-an-md5-hash-just-as-random-as-any-other-substring –

+0

Mi chiedo se ottenere i primi 4 byte sia meglio che utilizzare il CRC32 dell'hash md5. –

+0

Sì, perché i primi 32 bit in MD5 dovrebbero essere distribuiti in modo casuale, quindi non è possibile migliorare la distribuzione. –

risposta

7

La risposta è sì, è possibile utilizzare i primi 4 byte come un id. Attenzione al paradosso del compleanno però:

http://en.wikipedia.org/wiki/Birthday_paradox

Il rischio di collisione aumenta rapidamente quando si aggiungono più file. Con 50.000 ci sono circa il 25% di possibilità che tu possa avere una collisione.

MODIFICA: Ok, basta leggere il collegamento alla tua altra domanda e con 100.000 file la probabilità di collisione è circa del 70%.

1

Un altro modo per accorciare l'hash è convertirlo in qualcosa di più efficiente di HEX come Base64 o qualche variante di lì.

Anche se sei determinato ad assumere 4 caratteri, prendere 4 caratteri di base64 ti dà più bit di hex.

+0

solo se si attiva l'esadecimale nel suo modulo 0-F. Puoi ancora prendere i valori dei byte grezzi e usarli. Che in tal caso sarebbero più bit di base-64 – Sekhat

Problemi correlati