数组的最佳哈希方法是什么byte
?
这些数组是序列化的类对象,包含通过 TCP/IP 在应用程序之间传递的 jpeg 图像。
数组大小约为200k。
任何内置的散列函数都可以;根据您对碰撞的关心程度,您可以选择以下选项(从最多碰撞到最少碰撞):
- MD5
- SHA1
- SHA256
- SHA384
- SHA512
它们使用起来非常简单:
var hash = SHA1.Create().ComputeHash(data);
奖励分数:如果您不关心安全性(我认为您不关心安全性,因为您正在获取图像的哈希值),您可能需要研究 Murmur 哈希,它是为内容哈希而不是安全哈希而设计的(因此是快多了)。然而,它不在框架中,因此您必须找到一个实现(您可能应该选择 Murmur3)。
Edit:如果您正在寻找HASHCODE对于 byte[] 数组,这完全取决于您,它通常由位移(按素数)和异或组成。例如。
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:如果您想验证该值没有更改,您应该使用CRC32.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)