Adler-32 校验和计算
提供了一个 C# 实现的 Adler-32 校验和计算,用于 .NET Framework
引言
校验和是一种常用的确保数据完整性的方法。Adler-32 校验和可用于检测损坏的文件,或比较两个文件是否相同。
背景(来自 en.wikipedia.org)
Adler-32 是一种校验和算法,由 Mark Adler 发明。它在可靠性上几乎与 32 位循环冗余校验码相当,用于保护数据免受意外修改,例如在传输过程中发生的失真。
Adler-32 校验和是通过计算两个 16 位校验和 A 和 B,并将它们的位连接成一个 32 位整数来获得的。A 是字符串中所有字节的总和;B 是从每个步骤开始计算 A 的单个值的总和。在 Adler-32 运行的开始,A 初始化为 1,B 初始化为 0。求和运算以 65521(小于 216 的最大质数)为模。字节以网络顺序(大端)存储,B 占据两个最高有效字节。该函数可以表示为 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 其中 D 是要计算校验和的字节字符串,N 是 D 的长度。
Using the Code
以下是在不考虑其工作原理的情况下,将 Adler-32 校验和添加到程序中的步骤
- 将源代码 AdlerChecksum.cs 添加到您的项目中,并在您的源代码文件中添加
using FileHelper;
- 创建
AdlerChecksum
类的实例。 - 调用
MakeForFile
方法进行校验和计算。 - 通过
ChecksumValue
属性获取 Adler-32 校验和值。可以使用ToString
方法进行打印。
请参阅下面的示例代码
// Adler-32 checksum using
AdlerChecksum acs = new AdlerChecksum();
if (acs.MakeForFile(textPath.Text))
textVal.Text = acs.ToString(); //success
else
textVal.Text = "Unable to get checksum!"; //failure
结论
我希望这段代码对您有所帮助!感谢大家的评论和批评。欢迎提出新的建议和想法。
历史
- 版本 1.0.0.0,2007 年 10 月 29 日 - 首次发布