2010-05-27 14 views
5

Oggi ho letto dell'hash MD5 e mi chiedevo se fosse possibile. sembra un problema ricorsivo ... o c'è una soluzione?Salvare un hash MD5 di un file di testo nello stesso file di testo?

+0

È possibile ... md5 (merda + x) == x ? come un documento con le proprie informazioni MD5 nella sua ultima pagina? – bakra

+0

Sì, come ho scritto è possibile in teoria - ma per farlo è necessario un sacco di tentativi e fortuna ... non è possibile * costruire * un tale documento con un solo scatto. – tanascius

risposta

2

è necessario escludere la somma hash dal calcolo. Poi lo hai usato, ma non puoi aggiungere il rum hash alla fine del file aspettandoti che sia corretto, o se calcoli il run su new yu finirai sempre con un nuovo hash MD5. Zare in una storia infinita :)

3

Beh, non appena si compila la somma MD5 del file cambierà e ottenere un nuovo MD5 - così: no, non è possibile. In teoria solo il trial-and-error potrebbe portare a un documento che contiene il proprio hash ... ma il documento sarebbe probabilmente abbastanza confuso e non contenere nulla di significativo.

Ma è possibile riempire 128 bit con zeri (ad esempio) durante il calcolo. Questo luogo manterrà la somma MD5 e dovrà essere nuovamente zero, quando verificherà l'hash in seguito.

+0

addendum: Non è fattibile ** che sappiamo di **. È abbastanza probabile che qualche futuro supergeni matematico creerà un modo per costruire rapidamente un file del genere. –

+0

@BlueRaja: vedere [qui] (http://www.mscs.dal.ca/~selinger/md5collision/). – sbi

+0

@sbi: che non ha nulla a che fare con questa dose ... –

4

Non è possibile.

Ma è possibile rinominare il file in base all'hash del suo contenuto, che allega le informazioni senza modificare l'hash.

1

Bene, l'aggiunta di un hash MD5 a un testo cambia il testo e quindi l'hash MD5. Non è possibile calcolare un hash MD5 dell'hash MD5 testo-compreso-da-essere-calcolato.

4

Considera qualsiasi hash e immagina di aggiungere del testo a caso. Poiché non v'è una quantità infinita di possibili testi si potrebbe aggiungere, ma solo una quantità finita di possibili hash valori, ci deve essere possibili testi che danno l'hash. Il problema è che potresti non avere abbastanza risorse per trovarlo.

Che cosa si potrebbe essere in grado di provare è se ci sono valori di hash MD5 che, quando hash, yield themselves as a result (grazie a Francesco per questo link!):
Per tutte le possibili permutazioni di un hash MD5, creare l'hash e confronta il risultato con l'originale.

+1

Cioè, l'hash MD5 ammette un punto fisso? Vedi http://stackoverflow.com/questions/235785/is-there-an-md5-fixed-point-where-md5x-x – Francesco

+0

@Francesco: Grazie per il collegamento, l'ho aggiunto alla risposta. – sbi

+0

Stavo pensando di più in questi termini: md5 (merda + x) == x? Intendo un .doc contenente altre cose + le informazioni di hash MD5 alla fine. – bakra

2

In teoria, è possibile: i possibili contenuti del file sono infiniti, possibili hash non lo sono. In pratica, essere in grado di farlo significherebbe che hai trovato una vulnerabilità nell'algoritmo, rendendo così l'hash inutile per motivi di sicurezza.

0

Ecco un altro trucco ...

Salva Hash inizio nel file e il calcolare MD5 è escluso che i dati della regione e solo importanti.

"HashMD5 = Md5.ComputeHash(bytes, 382, bytes.Length - 382)" 

Quindi conta Hash solo per un'area di dati (Struttura di dati su ordinazione a partire dopo aver compensato 382 nel buffer di file)

------------------- ---- struttura di dati di esempio seguire -----------

<StructLayout(LayoutKind.Sequential, Pack:=1, CharSet:=CharSet.Ansi)> 
<Serializable()> Structure MyData 
    Dim FileCheckSum() As Byte '16 bytes HASh for file 'Config.bin' 
    Dim Padding() As Byte  ' 0xFF x 20 bytes 
    Dim RemoteDevice As RmtDevice 

End Structure 

inizio nel scrivere questa str di presentare config.bin utilizzando "xxxx.FileSystem.WriteAllBytes()"

file di configurazione Quindi aprire usando l'editor esadecimale trovare la posizione di partenza elemento imbottitura (nel mio caso era 382)

In seguito utilizzare questo non come offset per calcolare MD5 piuttosto su tutto il file. In questo modo si ha poca sicurezza contro i dati corrotti

Nota !! -. finché non di elementi di struttura/ordine/elemento nos rimane iniziare stessa imbottitura posizione rimane la stessa

Lavorare per me ..

Testato. .net

Problemi correlati