我有一个内部有2个字节的结构。如何计算这种结构数组的校验和(例如MD5哈希)?
public struct MyStruct
{
public byte Byte1;
public byte Byte2;
}
public class MyClass
{
public static byte[] ComputeChecksum(MyStruct[] myStructs)
{
// TODO: calculation.
}
}
答案 0 :(得分:1)
那么你想要STRONG摘要还是只需要一个快速的错误检查/一致查找值?
MD5 / SHA是非常密集的操作 - 它们是围绕数百字节的倍数的块结构构建的。
fletcher和CRC32效率很高,并且可以很好地生成一个随机数。他们不擅长的是拥有随机位位置。所以例如,你不会只想看一个fletcher上部或下部8位(因为变化太小)..
要么找到一个开源库,要么点击维基百科来获取各种算法。我倾向于使用类似的东西:
u32 hash_mystruct(mystruct[] data, u32 count) {
return hash((u8*)data, sizeof(mystruct) * count);
}
u32 hash(u8* data, u32 size) {
u32 hash = 19;
for (u32 i = 0; i < size; i++) {
u8 c = *data++;
if (c != 0) { // usually when doing on strings this wouldn't be needed
hash *= c;
}
hash += 7;
}
}