2011-10-20 15 views
7

Birden çok veri bloğu karmalarını bağımsız olarak hesaplamalıyım. Böyle bir şey:HashAlgorithm.ComputeHash() durum bilgisi nedir?

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

Ben bloklar arasında aynı HashAlgorithm nesnesi de kullanabilir miyim? HashAlgorithm, ComputeHash() çağrıları arasında durumu sıfırlayacak mı yoksa HashAlgorithm nesnesini atmalı ve her yeni veri bloğu için yeni bir tane mi oluşturmalıyım? ComputeHash kullanma

cevap

2
-2

Aslında, .NET framework altında kareye gereksinim duyduğunuzda, bu işlevi elle kodlamalarını ancak .NET çerçevesini kullanmamanızı şiddetle tavsiye ettim.

Bazı aylarda 32bit .NET programını 64 bit pencereye taşıdım. Program çöktü. En azından, aynı .NET programına rağmen, karma değerinin farklı 32/64bit sistemi altında farklı olduğunu buldum. .NET karma algoritması yerine Djb algoritması kullandım ve program tamam çalışıyor.

Bu belge Cib tahriş algoritması hakkında, C# ile yeniden yazabilirsiniz. Bu zor bir iş değil.

+2

ben 'Object.GetHashCode()' kalıcı karmaları oluşturmak için kullanılmamalıdır kullanarak size katılıyorum. Bununla birlikte, "SHA256" gibi "System.Security.Cryptography" ad alanındaki iyi belgelenmiş karma algoritmaların kullanılması, uyardığınız sorunlara yol açmayacaktır. –

İlgili konular