Rsync算法
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
- 点赞
- 收藏
- 分享
- 文章举报
- Dropbox差异同步算法rsync及其改进算法原理
- rsync以及scp 算法优化
- rsync 的核心算法
- rsync核心算法介绍及应用探索
- 谈谈文件增量同步算法:RSYNC和CDC
- 基于rsync同步算法的文件同步系统JAVA实现(五)—— 重组数据块
- 基于差异的文件同步算法-The rsync algorithm
- rsync 的核心算法
- Rsync的实现算法
- rsync 的核心算法
- 详解rsync算法--如何减少同步文件时的网络传输量
- Rsync 算法解析与应用
- 数据同步算法(rsync和RDC)
- rsync的核心算法
- rsync 的核心算法
- rsync与scp区别以及rsync算法原理
- rsync 的核心算法
- rsync 核心算法的Java实现
- rsync 的核心算法
- rsync 的核心算法