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

发布于 2024-09-14 19:44:18 字数 275 浏览 5 评论 0原文

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

不防水意味着:我有机会为两个不同的字符串获得相同的校验和。

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

Not waterproof means: there's a chance I can get the same checksum for two different strings.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

稳稳的幸福 2024-09-21 19:44:18

由于可能的字符串比长值更多,因此肯定有两个不同的字符串会产生相同的校验和。

As there are more possible strings than long values, there are surely two different strings resulting in the same checksum.

深海蓝天 2024-09-21 19:44:18

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

如果您想要一个真正防水的“校验和”,您需要创建数据的第二个“实例”,并确保它包含与原始数据完全相同的数据,尽管它不必采用相同的格式(可以被加密或压缩)。

A checksum can never be waterproof, since it contains less data than the original data of which you are calculating the checksum.

If you want a real waterproof 'checksum', you need to create a second 'instance' of your data and make sure that it contains identically the same data as the original data, although it does not have to be in the same format (can be encryped or compressed).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文