Qualsiasi funzione di hashing incorporata dovrebbe essere eseguita; a seconda di quanto vi preoccupate per le collisioni queste sono le opzioni (dalla maggior parte delle collisioni al meno):
- MD5
- SHA1
- SHA256
- SHA384
- SHA512
Essi sono semplici da usare come:
var hash = SHA1.Create().ComputeHash(data);
Punti bonus: Se non ti importa della sicurezza (che non credo ti faccia dato che stai ottenendo gli hash per le immagini) potresti voler esaminare l'hash di Murmur, che è progettato per l'hashing del contenuto e hashing sicuro (ed è quindi molto più veloce). Tuttavia, non è nel framework, quindi dovrai trovare un'implementazione (e probabilmente dovresti optare per Murmur3).
Edit: Se siete alla ricerca di un HashCode per un [] array di byte è interamente a te, di solito costituita da bit spostamento (da numeri primi) e XOR. Per esempio.
public class ByteArrayEqualityComparer : IEqualityComparer<byte[]>
{
public static readonly ByteArrayEqualityComparer Default = new ByteArrayEqualityComparer();
private ByteArrayEqualityComparer() { }
public bool Equals(byte[] x, byte[] y)
{
if (x == null && y == null)
return true;
if (x == null || y == null)
return false;
if (x.Length != y.Length)
return false;
for (var i = 0; i < x.Length; i++)
if (x[i] != y[i])
return false;
return true;
}
public int GetHashCode(byte[] obj)
{
if (obj == null || obj.Length == 0)
return 0;
var hashCode = 0;
for (var i = 0; i < obj.Length; i++)
// Rotate by 3 bits and XOR the new value.
hashCode = (hashCode << 3) | (hashCode >> (29))^obj[i];
return hashCode;
}
}
// ...
var hc = ByteArrayEqualityComparer.Default.GetHashCode(data);
EDIT: Se si desidera convalidare che il valore non è cambiato si dovrebbe usare CRC32.
fonte
2011-08-30 13:52:48
Codice sicuro o pericoloso? – xanatos
sicuro, solo 'byte []' array –