Domanda

Sto usando il seguente codice per calcolare MD5SUM di un file -

byte[] b = System.IO.File.ReadAllBytes(file);
string sum = BitConverter.ToString(new MD5CryptoServiceProvider().ComputeHash(b));

Funziona normalmente normalmente, ma se trovo un file di grandi dimensioni (~ 1 GB), ad es. un'immagine ISO o un file VOB DVD - Ottengo un'eccezione di Memoria esaurita.

Tuttavia, sono in grado di calcolare MD5SUM in cygwin per lo stesso file in circa 10 secondi.

Per favore, suggerisci come posso farlo funzionare per file di grandi dimensioni nel mio programma.

Grazie

È stato utile?

Soluzione

Suggerisco di usare il metodo alternativo:

MD5CryptoServiceProvider.ComputeHash(Stream)

e passa un flusso di input aperto sul tuo file. Questo metodo quasi sicuramente non leggerà l'intero file in memoria in una volta sola.

Vorrei anche notare che nella maggior parte delle implementazioni di MD5 è possibile aggiungere byte [] nella funzione digest un pezzo alla volta, e quindi chiedere l'hash alla fine.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top