Kai*_*Kai 7 algorithm hash rsync
我正在寻求了解rsync算法的工作原理.经过一番阅读和思考,我想出了一个我认为算法失败的情况.我试图找出在实际实现中如何解决这个问题.
考虑这个例子,其中A是接收者,B是发送者.
A = abcde1234512345fghij
B = abcde12345fghij
Run Code Online (Sandbox Code Playgroud)
如您所见,唯一的变化是12345已被删除.
现在,为了让这个例子变得有趣,让我们选择一个5字节的块大小(字符).使用弱校验和散列发送方的值会给出以下值列表.
abcde|12345|fghij
abcde -> 495
12345 -> 255
fghij -> 520
values = [495, 255, 520]
Run Code Online (Sandbox Code Playgroud)
接下来我们检查A中是否有任何哈希值不同.如果有匹配的块,我们可以跳到该块的末尾进行下一次检查.如果有一个不匹配的块,那么我们发现了一个区别.我会逐步完成这个过程.
abcde -> 495(是的,所以跳过)12345 -> 255(是的,所以跳过)12345 -> 255(是的,所以跳过)fghij -> 520(是的,所以跳过)由于在值列表中找到了每个哈希值,因此我们得出结论:A和B是相同的.在我看来,这不是真的.
在我看来,只要有多个块共享相同的哈希值,就会发生这种情况.我知道我已经跳过了计算和检查强散列的步骤,但这不会产生任何影响,因为第二个和第三个块完全相同
我错过了什么?