CRC常用于判断文件在传输过程中文件内容是否被更改以及其他的一些加密算法,在Java中,CRC32 工具类提供给我们使用。

1.CRC校验具体原理如下:

  在要发送的数据帧后面附加一个数(这个就是用来校验的验证码,都为二进制序列),生成一个新帧发送给接受端。当然这个附加的数不能是随意的,它要使所生成的新帧与

发送端和接收端共同选定某个数整除(注意:这里不是使用的二进制除法,而是一种称为:模2除法)。生成的新帧到达接收端后,再用这个新帧除以(同上)这个选定的数。

因为在发送之前就已经附加了一个数,做了”去余“处理。也就能够整除了。所以结果应该没有余数。如果有余数则表示在传输过程中出了差错。

说明:

  ”模2除法“ 与算术除法类似,但它既不向上借位,也不比较除数与被除数的相同位数值大小,只要以相同位数进行相除就可以了。模2加法运算为:1+1=0;1+0=1;0+1=1;0+0=0

2.模2减法运算为:1-1=0;1-0=1;0-1=1;0-0=0。相当于二进制中逻辑异或运算(相同为1,不同为0)。如100101除以1110,结果得到商为11,余数为1.如11*11=101

3.CRC具体执行步骤:

  1.先选择一个用于在接收端进行校验时,对接收的帧进行除法运算的除数

  2.看所选择的除数二进制数(假设k位),然后在要发送的数据帧(假设m位)后面加上k-1位”0“,然后以这个加了k-1个"0"的新帧(一共是m+k-1位)以”模2除法“方式除以上面这个除数,所得到的余数(也就是二进制字符串)就是该帧的CRC校验码,也称为:FCS(帧校验序列)。但一定要注意:余数的位数一定要是比除数位数只能少一位,哪怕前面一位是0,甚至全为0,也都不能省略。

  3.再把这个校验码附在原数据帧(也就是m位的帧,注意不是在后面形成的m+k-1为的帧)后面,构建一个新帧发送给接收端。最后把这个接收端以”模2除法“方式除以前面选择的除数,如果没有了余数,则表明该帧在传输过程中没有出现差错。

4.总结
  从上面可以看出:CRC有2个关键的点。一是要选择一个发送端和接收端都用来作为除数的二进制比特串(或多项式)。二是用原始帧与上面选择的进行二进制除法运算,计算出FCS。前者可以随机选择,也可以按照国际通用标准进行选择,但最高为与最低为都必须为1,CRC16=X^16+X^15+X^2+X(对应二进制:11000000000000101)

5.案例

  选择CRC生成多项式G(X)=X^4+X^3+1,要求求出二进制序列10110011的CRC校验码。

参考:https://wenku.baidu.com/view/34ba49149b89680202d82513.htmlram=1

http://www.repairfaq.org/filipg/LINK/F_crc_v31.html

CRC原理总结的更多相关文章

  1. crc循环冗余检验

    CRC(Cyclic Redundancy Check):循环冗余检验.在链路层被广泛使用的检错技术. CRC原理: 1.发送端 1.1.在发送端先将数据分组,每组k个数据.假定要传送的数据是M. 1 ...

  2. 基于MODBUS的CRC

    %ws   WCHAR wszName CRC原理 设编码前的原始信息多项式为P(x),P(x)的最高幂次加1等于k:生成多项式为G(x),G(x)的最高幂次等于r:CRC多项式为R(x):编码后的带 ...

  3. C# 实现CRC16校验

    前言 本文将使用一个NuGet公开的组件技术来实现CRC16校验功能,提供了一些简单的API,来方便的实现. 在Visual Studio 中的NuGet管理器中可以下载安装,也可以直接在NuGet控 ...

  4. CRC32为例详细解析(菜鸟至老鸟进阶)

    CRC-知识解析 cyclic redundancy check 写在前面的话: 之前在做学校项目的时候用到了CRC 原理,但在网上查找的过程中,发现讲解CRC知识的资源很多,但是对新手比较友好的.讲 ...

  5. layer2-1 二层

    一   概述    一层的相关介绍 CSMA/CD 网桥和交换机的区别 冲突    共享      端口密度     性能   功能   交换机的三种主流转发方式 存储转发         完整的收到 ...

  6. 在Visual C++中使用内联汇编

    一.内联汇编的优缺点 因为在Visual C++中使用内联汇编不需要额外的编译器和联接器,且可以处理Visual C++中不能处理的一些事情,而且可以使用在C/C++中的变量,所以非常方便.内联汇编主 ...

  7. 墙裂推荐!2020Android阿里&腾讯&百度&字节&美团校招面试汇总

    基本情况 2021届硕士生,Android开发岗 此文主要是2020年年初春招实习的面试和正式校招面试经验汇总,最终校招拿到了腾讯,百度,美团等offer 主要包括阿里4面,腾讯实习4面和校招4面,字 ...

  8. 阿里、腾讯、百度、网易、美团Android面试经验分享,拿到了百度、腾讯offer

    基本情况 2021届普通本科,Android开发岗. 此文主要是2020年秋招面试经验汇总,最终拿到了百度.腾讯的offer. 主要包括阿里三面,腾讯四面,百度三面,网易三面,美团一场面完. 阿里(由 ...

  9. CRC、反码求和校验 原理分析

    3月份开始从客户端转后台,算是幸运的进入全栈工程师的修炼阶段.这段时间一边是老项目的客户端加服务器两边的维护和交接,一边是新项目加加加班赶工,期间最长经历了连续工作三天只睡了四五个小时的煎熬,人生也算 ...

随机推荐

  1. 马尔科夫链在第n步转移的状态的概率分布

  2. JavaScript如何判断非空

    JavaScript判断非空的语句一般为: var elvis; if (typeof elvis !== "undefined" && elvis !== nul ...

  3. kinect/xiton 的环境搭建 + rgb图像和深度图的标定

    ~ 软件下载地址 openni https://structure.io/openni https://github.com/OpenNI/OpenNI2 其他软件建议直接下载或通过某宝购买配套的 ~ ...

  4. 怎么升级iOS10教程

    在前两天的开发者大会上刚推出了iOS10,我介绍一下怎么升级到iOS10的办法.所有人只用一个iPhone就可以升级到iOS10,不需要电脑,也不需要开发者账号. http://bbs.feng.co ...

  5. GCC的-wl,-rpath=参数

    使用GCC编译动态链接库的项目时,在其他目录下执行很可以出现找不到动态链接库的问题. 这种情况多发生在动态链接库是自己开发的情况下,原因就是程序运行时找不到去何处加载动态链接库. 可能会说在编译时指定 ...

  6. rbx1包里机器人仿真程序的实践

     git clone https://github.com/pirobot/rbx1.git 1.打开一个终端 cd ~/catkin_ws/ catkin_make source ./devel/s ...

  7. IIS反向代理实现Revel域名访问

    Revel实现域名访问 1.在cmd中启动revel项目,我设置的端口为8000 2.下载IIS的Application Request Routing Cache组件下载地址 3.安装ARR 4.打 ...

  8. Contiki 源码风格

    /** * \defgroup coding-style Coding style * * This is how a Doxygen module is documented - start wit ...

  9. React之jsx语法特性

    jsx 语法,直接可以在js中使用html标签. 还可以通过花括号的形式,在html标签中,写js表达式. <div> { 1 + 2 } hello,world! </div> ...

  10. Anomaly Detection for Time Series Data with Deep Learning——本质分类正常和异常的行为,对于检测异常行为,采用预测正常行为方式来做

    A sample network anomaly detection project Suppose we wanted to detect network anomalies with the un ...