2011-10-20 15 views
7

Ho bisogno di calcolare gli hash di più blocchi di dati in modo indipendente. Qualcosa di simile a questo:HashAlgorithm.ComputeHash() stateful?

using(HashAlgorithm hasher = new ActualHashAlgorithm()) { 
    for(int i = 0; i = numberOfBlocks; i++) { 
     byte[] block = getBlock(i); 
     byte[] hash = hasher.ComputeHash(block); 
     // use hash 
    } 
} 

Posso riutilizzare lo stesso oggetto HashAlgorithm tra i blocchi? Sarà lo stato di ripristino HashAlgorithm tra le chiamate a ComputeHash() o è necessario disporre dell'oggetto HashAlgorithm e crearne uno nuovo per ogni nuovo blocco di dati?

risposta

2
-2

In realtà, quando è necessario l'hash in .NET framework, ho fortemente consigliato di codificare questa funzione manualmente ma non di utilizzare .NET framework.

Alcuni mesi di età, ho migrato un programma .NET a 32 bit in finestre a 64 bit. Il programma si è bloccato. Almeno ho trovato il valore hash è diverso in diversi sistemi 32/64 bit, anche se lo stesso programma .NET. Ho usato l'algoritmo di Djb invece dell'algoritmo di hash .NET e il programma funziona correttamente.

Questo documento riguarda l'algoritmo hash di Djb, è possibile riscrivere con C#. Non è un duro lavoro.

+2

Sono d'accordo con te che utilizzando 'object.GetHashCode()' non deve essere usato per creare gli hash persistenti. Tuttavia, l'utilizzo degli algoritmi di hash ben documentati nello spazio dei nomi 'System.Security.Cryptography' come' SHA256' non porterà ai problemi che si avvertono. –

Problemi correlati