数据校验


数据校验

文章插图
数据校验【数据校验】数据校验是为保证数据的完整性进行的一种验证操作 。通常用一种指定的算法对原始数据计算出的一个校验值 , 接收方用同样的算法计算一次校验值 , 如果两次计算得到的检验值相同 , 则说明数据是完整的 。
基本介绍中文名:数据校验
外文名:Data validation
最简单的校验:把原始数据和待比较数据直接比较
适用範围:简单的数据量极小的通讯 。
简介数据在传输的过程中 , 会受到各种干扰的影响 , 如脉冲干扰 , 随机噪声干扰和人为干扰等 , 这会使数据产生差错 。为了能够控制传输过程的差错 , 通信系统必须採用有效措施来控制差错的产生 。?常用的差错控制方法让每个传输的数据单元带有足以使接收端发现差错的冗余信息 , 这种方法不能纠正错误 , 但可以发现数据错误 , 这种方法容易实现 , 检错速度快 , 可以通过重传使错误纠正 , 所以是非常常用的检错方案 。?在种方案中常用的校验方法有奇偶校验、CRC(循环冗余校验)和校验和 , 下面分别介绍这三种校验算法 。校验方法最简单的检验实现方法:最简单的校验就是把原始数据和待比较数据直接进行比较 , 看是否完全一样这种方法是最安全最準确的 。同时也是效率最低的 。套用例子:龙珠cpu线上调试工具bbug.exe 。它和龙珠cpu间通讯时 , bbug传送一个位元组cpu返回收到的位元组 , bbug确认是刚才传送位元组后才继续传送下一个位元组的 。奇偶校验实现方法:在数据存储和传输中 , 位元组中额外增加一个比特位 , 用来检验错误 。校验位可以通过数据位异或计算出来 。套用例子:单片机串口通讯有一模式就是8位数据通讯 , 另加第9位用于放校验值 。bcc异或校验法(block check character)实现方法:很多基于串口的通讯都用这种既简单又相当準确的方法 。它就是把所有数据都和一个指定的初始值(通常是0)异或一次 , 最后的结果就是校验值 , 通常把它附在通讯数据的最后一起传送出去 。接收方收到数据后自己也计算一次异或和校验值 , 如果和收到的校验值一致就说明收到的数据是完整的 。校验值计算的代码类似于:unsigned uCRC=0;//校验初始值for(int i=0;i<DataLenth;i++) uCRC^=Data[i];适用範围:适用于大多数要求不高的数据通讯 。套用例子:ic卡接口通讯、很多单片机系统的串口通讯都使用 。crc循环冗余校验(Cyclic Redundancy Check)实现方法:这是利用除法及余数的原理来进行错误检测的.将接收到的码组进行除法运算 , 如果除尽 , 则说明传输无误;如果未除尽 , 则表明传输出现差错 。crc校验具还有自动纠错能力 。crc检验主要有计算法和查表法两种方法 , 网上很多实现代码 。适用範围:CRC-12码通常用来传送6-bit字元串;CRC-16及CRC-CCITT码则用是来传送8-bit字元 。CRC-32:硬碟数据 , 网路传输等 。套用例子:rar,乙太网卡晶片、MPEG解码晶片中 。md5校验和数字签名实现方法:主要有md5和des算法 。适用範围:数据比较大或要求比较高的场合 。如md5用于大量数据、档案校验 , des用于保密数据的校验(数字签名)等等 。套用例子:档案校验、银行系统的交易数据 。实际套用防止自己的程式被篡改 。有些可执行程式 , 当被改了资源时再运行会有档案已损坏的提示 , 这就是使用了数据校验 。本例是用md5做为数据校验的算法 。当然你可以使用个性化的 , 比如des作为数字签名 , 那样安全性更高 。