Adler-32校验算法

Posted by AlstonWilliams on February 17, 2019

在研究ZooKeeper的时候,看到用到Adler-32算法来进行校验,由于之前从未用过,甚至没有听说过,所以就查了一下这个算法.

我看的是Wikipedia上的解释,所以这篇文章可以算是对Wikipedia上相关条目的总结.

为什么需要Adler-32算法

关于校验码算法,我们最熟悉的算法应该是CRC校验算法,那么有了CRC校验算法之后,为什么还要提出这样一个算法呢?

这个算法比CRC算法更加快速,但是安全性不如CRC.换句话说,就是在安全性和速度之间做了一个权衡.

算法描述

假设我们要得到D的Adler-32校验码,n是D的长度(以字节为单位).那我们可以用以下公式来取得:

其中要mod 65521.

好,公式就是这样.

我们来看一个具体的例子,这个例子同样是Wikipedia中的:

总结

算法很简单,对吧?

但是这个算法是正确的吗?我不知道,我并没有看到关于这个算法的论文,并没有去验证它的正确性.只能假设它是正确的,毕竟在JDK中已经实现了.