• 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

  • 相关阅读:
    实验四 交换机的Telnet远程登陆配置
    实验三 交换机的基本配置与管理
    实验二 认识Packet Tracer软件
    实验一 网络连接线的制作
    python入门(七)
    python入门(六)
    python入门(五)
    Android练习(二)
    Android练习(一)
    python入门(四)
  • 原文地址:https://www.cnblogs.com/kelan/p/5284487.html
Copyright © 2020-2023  润新知