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. iOS 转场动画核心内容

    CATransition——转场动画 CATransition是CAAnimation的子类,用于做转场动画,能够为层提供移出屏幕和移入屏幕的动画效果.iOS比Mac OS X的转场动画效果少一点. ...

  2. 扩容数据盘_Linux

    扩容数据盘_Linux_扩容云盘_云盘_用户指南_云服务器 ECS-阿里云 https://help.aliyun.com/document_detail/25452.html 磁盘扩容付费后: 在控 ...

  3. formData.append("username", "Groucho"); input 文件大小

    formData.append("username", "Groucho"); https://developer.mozilla.org/en-US/docs ...

  4. winserver 资源下载

    http://msdn.itellyou.cn/  下载各种系统资源,支持迅雷下载,速度杠杠的

  5. 警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:Zhuo' did not find a matching property.

    eclipse里面配置tomcat方法:window -- show view -- other -- 找到servers 点击finish 就会出现servers选项卡在选项卡中右键鼠标 new - ...

  6. 解决MAC Appium设备连不上IOS的的问题'idevice_id' program is not installed

    解决MAC Appium设备连不上IOS的的问题 错误的: [XCUITest] The 'idevice_id' program is not installed. If you are runni ...

  7. eclips 创建 maven项目

    Maven安装完成后我们就可以在Eclipse中新建自己的Maven项目了.我们可以在Eclipse中选择new一个project,在出现的对话框中选择Maven目录下的Maven Project. ...

  8. POJ3581 Sequence —— 后缀数组

    题目链接:https://vjudge.net/problem/POJ-3581 Sequence Time Limit: 5000MS   Memory Limit: 65536K Total Su ...

  9. python列表切片

    Python中符合序列的有序序列都支持切片(slice),例如列表,字符串,元组. 格式:[start:end:step] start:起始索引,从0开始,-1表示结束 end:结束索引 step:步 ...

  10. BZOJ 1579 [Usaco2009 Feb]Revamping Trails 道路升级:dijkstra 分层图【将k条边改为0】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1579 题意: 给你一个无向图,n个点,m条边,每条边有边权w[i]. 你可以将其中的k(k ...