这个校验和计算是否完全防水?
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
由于可能的字符串比长值更多,因此肯定有两个不同的字符串会产生相同的校验和。
As there are more possible strings than long values, there are surely two different strings resulting in the same checksum.
校验和永远不可能是防水的,因为它包含的数据少于您计算校验和的原始数据。
如果您想要一个真正防水的“校验和”,您需要创建数据的第二个“实例”,并确保它包含与原始数据完全相同的数据,尽管它不必采用相同的格式(可以被加密或压缩)。
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).