2011-02-07 10 views
5

Sto scaricando un file da un server http e devo tener conto che in un punto casuale durante il download, la connessione di rete non riesce o il computer si blocca. Se ciò accade, avvio un download riprendi utilizzando l'intestazione HTTP "Range:".Digestione MD5 di un download ripristinato

Poiché il download deve essere convalidato con un hash MD5, non sembra esserci alcun modo per me di utilizzare la rete inputstream dopo un curriculum per ottenere l'hash corretto, poiché java.security.MessageDigest non sembra avere il metodo che in pratica dice "avvia l'attuale hash MD5 da questo hash md5 parziale che ho dal download precedente".

Non ho molta familiarità con l'interno di MD5 - sarebbe teoricamente possibile e c'è una libreria che mi permetta di farlo?

L'elaborazione dell'hash md5 dal file scaricato sarebbe proibitivamente costoso per quanto riguarda le prestazioni.

+0

ho aggiunto una 'd' nel titolo come sembrava di cui parlavi riprende, come nel pezzo di carta che ha la vostra esperienza di lavoro su di esso – Woot4Moo

risposta

3

È possibile alimentare l'MD5 con il contenuto del file da riprendere prima di alimentarlo nel flusso di rete.

Se è stato implementato MD5 da solo, è possibile salvare lo stato lungo il file parzialmente scaricato e riprendere il calcolo MD5 da lì. Ad esempio utilizzando this MD5 implementation dovrebbe essere semplice come salvare/caricare il com.twmacinta.util.MD5State state all'interno di com.twmacinta.util.MD5. Per quanto riguarda il tuo commento, tieni presente che le implementazioni native sono completamente opzionali e dovrebbero funzionare in puro Java. Ecco una citazione dal documentation:

Questa classe tenterà di utilizzare un metodo nativo per calcolare rapidamente checksum quando la libreria nativa appropriata è disponibile [...] Se la libreria non viene trovato, il codice cadrà di nuovo al predefinito (più lento) codice Java.
+0

Siamo spiacenti, nel post originale I didn' cito la possibilità di un riavvio di jvm. Anche questo dovrebbe essere preso in considerazione. – EddyYosso

+0

Hai ragione. Dall'osservazione del codice, deduco che dovresti essere in grado di mantenere lo stato in questo digest veramente facile. Grazie. L'unica cosa che mi dà fastidio con questa particolare libreria sono le dipendenze native. Questa classe sembra promettente anche se http://ostermiller.org/utils/MD5.java.html – EddyYosso

2

Ho appena terminato di creare una libreria per questo problema utilizzando il fast-md5 suggerito ma senza supporto nativo. È possibile serializzare lo stato e ricaricarlo quando il programma si riavvia.

https://code.google.com/p/project-penny/wiki/RecMD5

+0

Ho corretto il collegamento al wiki di project-penny (download manager). – eckes