2.23 cksum:文件的CRC校验

作用:打印每个文件的CRC校验和及字节统计。

用法:cksum [文件]...

或cksum [选项]

主要选项如下。

● --help:显示此帮助信息并退出。

● --version:输出版本信息并退出。

说明:CRC(Cyclic Redundancy Check,循环冗余校验码)是常用的校验码,在早期的通信中运用广泛,因为早期的通信技术不够可靠(不可靠性的来源是通信技术决定的,比如电磁波通信时受雷电等因素的影响),不可靠的通信就会带来“确认信息”的困惑,比如红军和蓝军通信联合进攻山下敌军的例子,第一天红军发了一条信息要蓝军第二天一起进攻,蓝军收到之后,发一条确认信息,但是蓝军担心的是“确认信息”如果也不可靠而没有成功到达红军那里,那自己岂不是很危险?于是红军再发一条“对确认的确认信息”,但同样的问题还是不能解决,红军仍然不敢贸然行动。对通信的可靠性检查就需要“校验”,校验是从数据本身进行检查,它依靠某种数学上约定的形式进行检查,校验的结果是可靠或不可靠,如果可靠就对数据进行处理,如果不可靠,就丢弃重发或者进行修复。

CRC码由两部分组成,前半部分是信息码,就是需要校验的信息,后半部分是校验码,如果CRC码共长n个bit,信息码长k个bit,就称为(nk)码。它的编码规则是:

(1)首先将原信息码(kbit)左移r位(k+r=n)。

(2)运用一个生成多项式gx)(也可看成二进制数)用模2 除上面的式子,得到的余数就是校验码。

非常简单。要说明的是:模2除就是在除的过程中用模2加,模2加实际上就是我们熟悉的异或运算,就是加法不考虑进位,公式是:

0+0=1+1=0,1+0=0+1=1

即“异”则真,“非异”则假。

由此得到定理:

a+b+b=a

也就是“模2减”和“模2加”真值表完全相同。

有了加减法就可以用来定义模2除法,于是就可以用生成多项式g(x)生成CRC校验码。

例如:g(x)=x4+x3+x2+1,(7,3)码,信息码110产生的CRC码就是:

11101 | 110,0000(设a=11101,b=1100000)

取b的前5位11000跟a异或得到101,101加上b没有取到的00得到10100,然后跟a异或得到01001,也就是余数1001,余数是1001,所以CRC码是110,1001。

对于g(x)=x4+x3+x2+1的解释:(都是从右往左数)x4表示第5位是1,因为没有x1,所以第2位就是0。

标准的CRC码是CRC-CCITT和CRC-16,它们的生成多项式是:

CRC-CCITT=x16+x12+x5+1

CRC-16=x16+x15+x2+1

应用实例如下。

使用CRC检验文件:

        cksum 1.txt
        2422907486124 1.txt