Cualquiera de las funciones hash incorporadas debería hacer; dependiendo de la cantidad que se preocupan por las colisiones estos son sus opciones (en la mayoría de las colisiones a menos):
- MD5
- SHA1
- SHA256
- SHA384
- SHA512
Ellos son tan simples de usar como:
var hash = SHA1.Create().ComputeHash(data);
Marcas de bonificación: Si no te importa la seguridad (que no creo que hagas dado que estás obteniendo los valores hash para las imágenes) es posible que desees consultar Murmur hash, que está diseñado para hash de contenido y no hashing seguro (y por lo tanto es mucho más rápido). Sin embargo, no está en el marco, por lo que tendrá que encontrar una implementación (y probablemente debería optar por Murmur3).
Editar: Si usted está buscando un código hash para una matriz de bytes [] es totalmente de usted, por lo general consiste en el desplazamiento de bits (por números primos) y la operación XOR. P.ej.
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: Si desea validar que el valor no ha cambiado usted debe utilizar CRC32.
¿Código seguro o inseguro? – xanatos
seguro, solo 'byte []' matriz –