![cksum 返回的可能值的范围](https://linux22.com/image/4533/cksum%20%E8%BF%94%E5%9B%9E%E7%9A%84%E5%8F%AF%E8%83%BD%E5%80%BC%E7%9A%84%E8%8C%83%E5%9B%B4.png)
我正在寻找 可以返回的可能值的范围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(谢谢谷歌!)