关于数据校验

2016-01-29 12:13 39 1 收藏

关于数据校验,关于数据校验

【 tulaoshi.com - C语言心得技巧 】

关于数据校验

作者:king_koo

下载源代码



1.什么是数据校验
通俗的说,就是为保证数据的完整性,用一种指定的算法对原始数据计算出的一个校验值。接收方用同样的算法计算一次校验值,如果和随数据提供的校验值一样,就说明数据是完整的。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

2.最简单的检验
实现方法:最简单的校验就是把原始数据和待比较数据直接进行比较,看是否完全一样这种方法是最安全最准确的。同时也是效率最低的。

适用范围:简单的数据量极小的通讯。

应用例子:龙珠cpu在线调试工具bbug.exe。它和龙珠cpu间通讯时,bbug发送一个字节cpu返回收到的字节,bbug确认是刚才发送字节后才继续发送下一个字节的。

3.奇偶校验Parity Check
实现方法:在数据存储和传输中,字节中额外增加一个比特位,用来检验错误。校验位可以通过数据位异或计算出来。

应用例子:单片机串口通讯有一模式就是8位数据通讯,另加第9位用于放校验值。

参考网页:http://www.gjwtech.com/scomm/sc1whatisparity.htm

4.bcc异或校验法(block check character)
实现方法:很多基于串口的通讯都用这种既简单又相当准确的方法。它就是把所有数据都和一个指定的初始值(通常是0)异或一次,最后的结果就是校验值,通常
把她附在通讯数据的最后一起发送出去。接收方收到数据后自己也计算一次异或和校验值,如果和收到的校验值一致就说明收到的数据是完整的。
校验值计算的代码类似于:
unsigned uCRC=0;//校验初始值
for(int i=0;i<DataLenth;i++) uCRC^=Data[i];

适用范围:适用于大多数要求不高的数据通讯。

应用例子:ic卡接口通讯、很多单片机系统的串口通讯都使用。

5.crc循环冗余校验(Cyclic Redundancy Check)
实现方法:这是利用除法及余数的原理来进行错误检测的.将接收到的码组进行除法运算
,如果除尽,则说明传输无误;如果未除尽,则表明传输出现差错。crc校验
具还有自动纠错能力。
crc检验主要有计算法和查表法两种方法,网上很多实现代码。

适用范围:CRC-12码通常用来传送6-bit字符串;CRC-16及CRC-CCITT码则用是来传送
8-bit字符。CRC-32:硬盘数据,网络传输等

应用例子:rar,以太网卡芯片、MPEG解码芯片中

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

参考网页:http://www.ahetc.gov.cn/cit/200209/23.doc

6.md5校验和数字签名
实现方法:主要有md5和des算法。

适用范围:数据比较大或要求比较高的场合。如md5用于大量数据、文件校验,des用于保
密数据的校验(数字签名)等等。

应用例子:文件校验、银行系统的交易数据

参考网页:http://info.fw315.hc360.com/html/001/001/012/20220.htm

7.数据校验的一个实际应用
防止自己的程序被篡改的例子。
有些可执行程序,当被改了资源时再运行会有文件已损坏的提示,这就是使
用了数据校验。本例是用md5做为数据校验的算法。当然你可以使用个性化的
比如des作为数字签名,那样安全性更高。
编译时,将提示如图1的信息,请记下上面的数值,然后写回程序的比较字符
中。再次编译就不会提示了,直接进入程序。如果你使用pe资源修改器修改
改该exe文件了资源,再运行又会出现图1的提示。具体请见代码及注释。
下载地址:http://otiana.com/vcangle/srcpage.htm

来源:http://www.tulaoshi.com/n/20160129/1485146.html

延伸阅读
1.校验日期 <script language=javascript function isDate(str) { var r = str.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/); if(r==null)return false; var d = new Date(r, r-1, r); return (d.getFullYear()==r&&(d.getMonth()+1)==r&&d.getDate()==r); } alert(isDate("2002-01-31")); alert(isDate("2002-01-41")...
[关于判断输入数据是否在数据库中的方法。] 问题:假如你想输入一个用户姓名,那么如何判断该姓名在数据库中是存在的呢;或者你输入了一个密码,如何判断它是正确的呢?我在这里总结了几种:1. 使用find()方法读出数据到一个datatable,给它建立主键。然后定义一个datarow变量,使其等于datatable.find(“输入的待判断的值对应的主键̶...
标签: Web开发
提要 实时的数据校验是AJAX技术的重要优点之一,Struts校验框架通过加入这种技术进一步丰富了其MVC,从而使得Web应用程序的开发效果更接近于桌面应用程序。 一、 引言 校验框架的根本目的是实现域校验。在Web应用程序中有许多方法可以实现域校验,总体上可以分为两类:服务器端和客户端。其中,Struts校验框架是适合于基于Java的...
一、密码式 给数据库起一个随机复杂的名称,避免被猜到被下载,这种方式在以前很流行,因为大家都对自己的代码很有自信。但随着错误提示对数据库地址的泄露导致数据库被非法下载,这种方式也就越来越少人用了。 二、"#"式 在数据库名称里加上#号,从URL上请求时#是请求地址和请求参数的一个分隔字符,如果知道了数据库名...
  有些事情对我们系统管理员来说至少发生过一次,就是你感觉到你的系统好像不对劲 ,开始怀疑有人已经突破了你的防御。确定此事是否发生的途径之一就是检查系统文 件有没有变化,你需要安装TripWire或者其他审计工具来帮忙。 幸运的是,Red Hat的程序员们开发了一个工具,叫作Red Hat Package Manager,简 称为R...

经验教程

592

收藏

8
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部