如何为struct数组计算CRC(校验和)?

时间:2011-11-17 14:34:56

标签: c# arrays struct md5 checksum

我有一个内部有2个字节的结构。如何计算这种结构数组的校验和(例如MD5哈希)?

public struct MyStruct
{
    public byte Byte1;
    public byte Byte2;
}

public class MyClass
{
    public static byte[] ComputeChecksum(MyStruct[] myStructs)
    {
        // TODO: calculation.
    }
}

1 个答案:

答案 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;
    }
  }