擅长:python、mysql、java
<p>在你的“滚动”方法中</p>
<pre><code>b = (b - (block_size * ord(removed)) + a) % MOD_VALUE
</code></pre>
<p>应该是</p>
^{pr2}$
<p>根据维基百科对<a href="http://en.wikipedia.org/wiki/Adler-32" rel="nofollow">adler32</a>算法的解释,我们可以看到:</p>
<pre><code>A = 1 + D1 + D2 + ... + Dn (mod 65521)
B = (1 + D1) + (1 + D1 + D2) + ... + (1 + D1 + D2 + ... + Dn) (mod 65521)
= n×D1 + (n−1)×D2 + (n−2)×D3 + ... + Dn + n (mod 65521)
Adler-32(D) = B × 65536 + A
</code></pre>
<p>当我们滚动校验和时,我们将得到以下等式:</p>
<pre><code>A1 = (1 + D2 + D3 + … + Dn + Dn+1)(mod 65521)
= (1 + D1 + D2 + D3 + … + Dn) – D1 + Dn+1(mod 65521)
= A – D1 + Dn+1(mod 65521)
B1 = (1 + D2) + (1 + D2 + D3) + … + (1 + D2 + D3 + … + Dn + Dn+1)(mod 65521)
= (1 + D1) – D1 – 1 + (1 + D1 + D2) – D1 + ... +(1 + D1 + D2 + … + Dn) – D1 + (1 + D1 + D2 + … + Dn + Dn+1) – D1(mod 65521)
= B – nD1 – 1 + A1 + D1 – D1(mod 65521)
= B – nD1 + A1 – 1(mod 65521)
</code></pre>