您的位置:首页 > 其它

Rsync算法

2020-02-03 00:31 246 查看

Rsync算法
A = 1+D1+D2+.......+Dn
B = (1+D1+D2)+(1+D1+D2+D3)+......+(1+D1+D2+...+Dn)
A:->(初值为1)每次都加上新的一个字符的ASCII码
B:->(初值为0)原来的B+新的A的值->新的B

求模,是{(A+B)对C求模}等价于{A对C求模+B对C求模}   C=65521

B(与C模运算后的值)左移16位加上A(与C模运算后的值)得到一个32位的数


Adler-32算法(可滚动的字流)
第一次(第一次的比较块)算的A、B
A = 1+D1+D2+.......+Dn
B = (1+D1+D2)+(1+D1+D2+D3)+......+(1+D1+D2+...+Dn)
第2次(第2次的比较块)算的A、B
A = 1+D2+.......+Dn+D(n+1)
B = (1+D2)+(1+D2+D3)+......+(1+D2+...+Dn+D(n+1)).....
A = 原来的A-D1+D(n+1)
B=原有B-(1+n*D1)+A
选用Adler-32算法的好处是,在后面比较的时候不用像第一块比较时那样去算A、B,只用用算法A = 原来的A-D1+D(n+1)  ;B=原有B-(1+n*D1)+A来计算A、B,这样就比较快,算法的复杂度为1.
B左移16位加上A得到一个32位的数才是最后的Adler值(B为高16位A为低16位)


Adler值的解析:
Adler值的反推(反推回A、B):
Adler值(是32位的)与0xFFFFH(也是32位的,高16位是0,低16位为1)与运算,即得到A
然后又将Adler值(是32位的)右移16位,这时的Adler值变为0x0000B(注意是32位的,B是一个16位的),然后再与0xFFFFH也是32位的,高16位是0,低16位为1)与运算,即可以得到B,即解析出A、B。


好处:第一块数据值与服务器值不同时,后移一块,后移时的算法复杂度为1(只用用算法A = 原来的A-D1+D(n+1)  ;B=原有B-(1+n*D1)+A来计算A、B,这样就比较快,算法的复杂度为1.);

 

MD5 Algorithm(目前互联网加密用的最多的一种算法),这种算法是不能反推回去的。

密码排序,最多的是123456密码,然后找到这个密码反推就可能知道加密算法。

 

具体算法详解见http://en.wikipedia.org/wiki/Adler-32

转载于:https://www.cnblogs.com/kelan/p/5284487.html

  • 点赞
  • 收藏
  • 分享
  • 文章举报
anzhan3739 发布了0 篇原创文章 · 获赞 0 · 访问量 45 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: