安全基础学习-CRC理解与计算

news2024/12/27 2:11:05

由于一些任务要求需要了解CRC校验,于是来学习一下。
新人学习,大佬绕路。

前言

CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。
在这里插入图片描述

CRC 的步骤大致如下:

  1. 选择多项式:选择一个预定义的多项式作为生成器。不同的应用和标准会使用不同的多项式。
  2. 初始化寄存器:设置 CRC 计算的初始值,通常是全 1 或全 0。
  3. 逐位处理数据:将数据分成多个位进行处理,计算时使用生成多项式。
  4. 计算结果:最终得到的结果就是 CRC 校验码。
    CRC 具有很强的错误检测能力,能检测到常见的错误类型,如单比特错误、双比特错误、突发错误等。常见的 CRC 标准包括 CRC-16、CRC-32 等。

1、多项式表示

使用多项式来进行 CRC 计算的原因在于它能够很好地表示和处理二进制数据,同时提供了强大的数学工具来检测错误。多项式对应二进制的方式很直观,每一位二进制数都对应多项式的一个系数。

1.1 多项式与二进制的对应关系

多项式的每一个系数对应二进制数的每一位。

例如:
多项式 x3+x+1对应二进制 1011
x3对应二进制的最高位 1
x2 对应二进制的次高位 0(因为没有 x2项)
x1 对应二进制的次低位 1
x0 对应二进制的最低位 1

2.数据扩展

我们需要在数据后面附加与多项式阶数相同数量的零。因为多项式是三阶(最高次项是 x3),我们在数据后面加 3 个零:

1101 -> 1101 000

3.开始二进制除法

3.1 二进制除法与异或的关系

二进制除法在 CRC 计算中的实现本质上是通过异或运算来完成的,也有的地方叫做模2除法。

异或运算
异或运算的规则是:

如果两个位相同,则结果为0。
如果两个位不同,则结果为1。

3.2 具体步骤

在 CRC 计算中,二进制除法的步骤可以用异或运算来模拟。具体来说,当我们使用一个多项式(如 x3+x+1)去除一个二进制数据时,实际上我们是在执行一个逐位的异或运算。

3.2.1初始数据准备

原数据:1101
多项式:1011
新数据(在数据后面附加三个零):1101000

3.2.2 逐步计算过程

在这里插入图片描述
其他数据更复杂的计算举例
在这里插入图片描述
校验码为0b0001.

3.2.3校验码

0b0001

3.2.4信息码

0b1101001

3.2.5 详细总结:

  1. 数据扩展:在数据后面加上与多项式阶数相同数量的零。
  2. 对齐与异或:将数据的前几位与多项式对齐,进行异或运算,得到新结果。
  3. 重复步骤:将新的结果继续与多项式对齐,进行异或,直到数据处理完毕。
  4. 得到校验码:剩下的部分就是 CRC 校验码,位数与扩展保持一致。
  5. 得到信息码:将校验码添加到初始数据后可得到信息码。
    这种方法通过二进制除法来检测数据传输或存储中的错误,可以检测到常见的错误类型。实际应用中使用的多项式和数据长度会更复杂,但基本过程是一样的。

4.数据验证

用收到的信息码与除数做异或,余数为0,则说明收到的数据正确。
在这里插入图片描述

5.参数模型

CRC算法参数模型解释:

  • NAME:参数模型名称。
  • WIDTH:宽度,即CRC比特数。
  • POLY:生成项的简写,以16进制表示。例如:CRC-32即是0x04C11DB7,忽略了最高位的"1",即完整的生成项是0x104C11DB7。
  • INIT:这是算法开始时寄存器(crc)的初始化预置值,十六进制表示。
  • REFIN:待测数据的每个字节是否按位反转,True或False。
  • REFOUT:在计算后之后,异或输出之前,整个数据是否按位反转,True或False。
  • XOROUT:计算结果与此参数异或后得到最终的CRC值。
    在这里插入图片描述

参考链接

CRC参考链接1
CRC参考链接2
CRC参考链家3
CRC参考链接4
CRC参考链接5

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1962987.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《计算机工程与应用》投稿经验

目录 前言期刊简介详细过程第1步:网站投稿第2步:交审稿费第3步:等外审第4步:返修所需材料描述 第5步:外审/复审/录用第6步:录用 前言 记录下投《计算机工程与应用》的正刊投稿经验。 整理了一些投稿期间常…

【C#】 使用GDI+获取两个多边形区域相交、非相交区域

一、使用GDI获取两个多边形区域相交、非相交区域 在 C# 中使用 GDI(Graphics Device Interface Plus)处理图形时,你可以使用 System.Drawing 和 System.Drawing.Drawing2D 命名空间中的类来操作区域(Region)。下面是一…

取图小程序搭建教程,达人+流量主+会员快速部署上线指南

目录 一、取图小程序是什么? 二、搭建教程 (一)前期准备 (二)开发环境搭建 (三)部署与上线 三、部分代码展示 一、取图小程序是什么? 取图小程序以其多元化的功能而著称&…

抖音本地生活城市代理保证金多少?最新标准出炉!

随着本地生活的前景和潜力不断显现,抖音本地生活城市代理的申请热度不断攀升,并逐渐成为众多创业者入局本地生活的首要选择,而与之相关的问题,如抖音本地生活城市代理保证金等更是长居相关社群话题榜的前列。 而就目前的市场情况来…

2024华为数通HCIP-datacom最新题库(H12-831变题更新⑧)

请注意,华为HCIP-Datacom考试831已变题 请注意,华为HCIP-Datacom考试831已变题 请注意,华为HCIP-Datacom考试831已变题 近期打算考HCIP的朋友注意了,如果你准备去考试,还是用的之前的题库,切记暂缓。 1、…

抖音开放平台API接口如何开发||抖音相关接口数据采集数据分析 【附实例】

抖音开放平台提供了多种接口,包括授权登录、用户信息、视频管理、评论互动、消息通知、数据分析等。 以下是开发抖音接口的一些步骤: 1. 注册开发者账号:在抖音开放平台上注册开发者账号,获取开发者身份认证。 2. 创建应用&…

学习鸿蒙-利用Code Linter检查代码

如何检查: 1.在已打开的代码编辑器窗口单击右键点击Code Linter,或在工程管理窗口中鼠标选中单个或多个工程文件/目录,右键选择Code Linter > Full Linter执行代码全量检查。 2.通过git 提交,可在commit界面右下角点击齿轮图标…

嵌入式开发问题总汇

1. 事情经过:有天快下班的时候,我们采购经理找到我,说,生成的bin文件通过软件上传烧录时,烧录就会重启,但是其他的板子就不会。最后他换了一个A厂家的flash芯片,就可以了。但是,B厂…

使用 Postman 进行 Trello API 自动化测试的完整指南

文章目录 前言一、自动化测试是什么?二、比较自动化测试与手工测试1. 自动化测试2. 手工测试 三、环境搭建1.创建Collection2.创建环境变量3.添加API请求 四、设计测试用例1. API简单调用2. 获取所有emoji3. 创建一个新看板:4. 获得创建的看板信息5. 在看…

【Git】git 从入门到实战系列(一)—— Git 的诞生,Linus 如何在 14 天内编写出 Git?

<> 博客简介&#xff1a;Linux、rtos系统&#xff0c;arm、stm32等芯片&#xff0c;嵌入式高级工程师、面试官、架构师&#xff0c;日常技术干货、个人总结、职场经验分享   <> 公众号&#xff1a;嵌入式技术部落   <> 系列专栏&#xff1a;C/C、Linux、rt…

【机器学习】决策边界的基本概念以及如何在逻辑回归中找到决策边界

引言 在机器学习中&#xff0c;决策边界是分类算法用来区分不同类别数据点的线、面或超平面。这些边界通常是模型的预测规则&#xff0c;用于将特征空间中的点分配到不同的类别。决策边界可以是线性的&#xff0c;也可以是非线性的&#xff0c;取决于数据的分布和所使用的分类算…

探索开明软件包:应用开发指南轻松掌握,快速上手!

开明软件包格式&#xff0c;是openKylin社区Kaiming SIG为应对传统包格式存在的系统与应用无明确界限、发行版碎片化、兼容性等问题而开发的一款全新软件包格式&#xff0c;满足ISV&#xff08;Independent Software Vendors&#xff09;应用发布和应用独立发布需求&#xff0…

AI绘画:PS+comfyUI 工作流,直接在PS搞AI!

前言 直接在PS搞AI要不要&#xff1f; 大神 Nima Nazari 发布了一个可以无缝链接PS和comfyUI的工作流。 小编对该工作流进行了一个安装使用的测评&#xff0c;该工作流可以无缝与PS进行互联操作&#xff0c;切换模型和修改参数时还是需要在PS和ComfyUI间切换。总体而言&#x…

CSCP、CPIM和CLMP三大证书的区别?如何选择?

在制造型企业、供应链和运营管理专业人士都会不断寻找方法来提升他们的技能和职业前景。三种流行的认证——CSCP&#xff08;Certified Supply Chain Professional&#xff09;、CPIM&#xff08;Certified in Planning and Inventory Management&#xff09;以及CLMP&#xff…

其他:trycatch模块捕获循环错误,避免中断程序

介绍 今天有位同事问我怎么在某次循环报错后仍然可以继续程序运行&#xff0c;最后我们使用了trycatch模块。 代码解读 任务&#xff1a;在循环中&#xff0c;如果某次循环的calc出现错误则跳过这次循环并重新赋值结果 res_list <- list() # 创建一个空列表来存储结果fo…

整箱排柜不返工?用易境通散拼系统就OK

想必困扰散货拼柜小伙伴们一大难题就是&#xff0c;怎么把错乱纷繁的货物有序地整箱排柜&#xff0c;并且要保证集装箱高效利用&#xff0c;运输成本尽量降低。这不仅要求操作者具备卓越的统筹规划能力&#xff0c;更需长期积累的实践经验和敏锐的应变能力。易境通散拼系统可以…

[python] 启发式算法库scikit-opt使用指北

scikit-opt是一个封装了多种启发式算法的Python代码库&#xff0c;可以用于解决优化问题。scikit-opt官方仓库见&#xff1a;scikit-opt&#xff0c;scikit-opt官网文档见&#xff1a;scikit-opt-doc。 scikit-opt安装代码如下&#xff1a; pip install scikit-opt # 调用scik…

永结无间Ⅶ--具有知识图谱的高级 RAG

将知识图谱与先进的检索增强生成 (RAG) 策略相结合&#xff0c;以增强人工智能驱动的信息检索和生成 在增强 RAG 系统方面&#xff0c;知识图谱已成为改变游戏规则的因素。与传统矢量数据库不同&#xff0c;知识图谱提供丰富、互联的信息表示&#xff0c;可显著提高检索内容的…

Docker简介和Docker常见命令

目录 1. Docker 简介 1.1 Docker 的核心概念 1.2 Docker 的优势 1.3 Docker 工作流程 2. 常见命令 2.1 基本命令 2.2 镜像操作 2.3 容器操作 2.4 网络操作 2.5 卷操作 2.6 日志和监控 2.7 清理命令 3. 注意事项和最佳实践 3.1 镜像操作 3.2 容器操作 3.3 网络操…

18730 涂色问题

这个问题可以通过动态规划来解决。我们可以定义一个状态dp[i][j]&#xff0c;表示前i个牛舍中最后一个牛舍的颜色是j的涂色方案数量。然后我们可以通过状态转移方程来更新dp[i][j]。 状态转移方程如下&#xff1a; dp[i][j] dp[i-1][k] (k ! j) 然后我们需要对所有的dp[i][…