代码之家  ›  专栏  ›  技术社区  ›  sharkin

这个校验和计算完全防水吗?

  •  0
  • sharkin  · 技术社区  · 14 年前
    long make_checksum(const char* str)
    {
      long chk=0;
      long rot=0;
      while(*str)
      {
        rot<<=9;
        rot|=(rot>>23);
        rot^=*(char*)str++;
        chk+=rot;
      }
      return chk;
    }
    

    2 回复  |  直到 14 年前
        1
  •  5
  •   Henrik    14 年前

    由于可能的字符串多于长值,因此肯定有两个不同的字符串导致相同的校验和。

        2
  •  1
  •   Patrick    14 年前

    校验和不可能是防水的,因为它包含的数据比计算校验和的原始数据少。