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;
}
不防水意味着:我可以为两个不同的字符串获得相同的校验和。
答案 0 :(得分:5)
因为有更多可能的字符串而不是长值,所以肯定会有两个不同的字符串导致相同的校验和。
答案 1 :(得分:1)
校验和永远不会防水,因为它包含的数据少于计算校验和的原始数据。
如果你想要一个真正的防水“校验和”,你需要创建数据的第二个“实例”并确保它包含与原始数据相同的数据,尽管它不必相同格式(可以加密或压缩)。