65.9K
CodeProject 正在变化。 阅读更多。
Home

Adler-32 校验和计算

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.22/5 (8投票s)

2007年10月29日

CPOL

2分钟阅读

viewsIcon

60783

downloadIcon

2638

提供了一个 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 日 - 首次发布
© . All rights reserved.