cksum 返回的可能值的范围

cksum 返回的可能值的范围

我正在寻找 可以返回的可能值的范围cksum。例如

echo -n '/my/path/filename' | cksum | cut -d' ' -f1

返回2379496500。可以返回的可能值的范围(最小值和最大值)是多少?

顺便说一句,上面的参数是完全限定文件路径的字符串值,而不是由此指定的文件的内容。

答案1

POSIX标准指定 所使用的 CRC 算法cksum。我在这里引用相关部分(强调我的):

CRC 校验和的编码由生成多项式定义:

G(x)=x 32 +x 26 + x 23 +x 22 +x 16 + x 12 +x 11 +x 10 +x 8 +x 7 +x 5 +x 4 +x 2 +x+1

从数学上讲,对应于给定文件的 CRC 值应通过以下过程定义:

要评估的 n 位被认为是 n-1 次 mod 2 多项式 M(x) 的系数。这 n 位是文件中的位,最高有效位是文件第一个八位字节的最高有效位,最后一位是最后一个八位字节的最低有效位,用零位填充(如果需要)以实现整数个八位位组,后跟一个或多个以二进制值表示文件长度的八位位组,首先是最低有效八位位组。应使用能够表示该整数的最小数量的八位位组。

M(x) 乘以 x 32(即左移 32 位),并使用 mod 2 除法除以 G(x),产生次数 <= 31 的余数 R(x)。

R(x) 的系数被视为 32 位序列。

位序列被求补,结果就是 CRC。

就这样, 的 CRCcksum是一个 32 位序列,因此它的值范围从 0 到2 32 -1 =4294967295(谢谢谷歌!)

相关内容