CRC 循环冗余效验
CRC循环冗余效验 利用多项式 x6 + x4 + x3,实际为使用模2除法来做的加密
常用crc多项式有
名称 |
生成多项式 |
数值式 |
简记式 |
标准引用 |
CRC-4 |
x4+x+1 |
0x1’3 |
0x3 |
ITU G.704 |
CRC-8 |
x8+x5+x4+1 |
0x1’31 |
0x31 |
|
CRC-8 |
x8+x2+x1+1 |
0x1’07 |
0x07 |
|
CRC-8 |
x8+x6+x4+x3+x2+x1 |
0x1’5E |
0x5E |
|
CRC-12 |
x12+x11+x3+x2+x+1 |
0x1’80F |
0x80F |
|
CRC-32c |
注** |
0X1’1EDC6F41 |
0x1EDC6F41 |
SCTP |
多项式即要验证数据的除数
过程
a.生成 循环效验的余数 例如;要发送的数据a 对 指定除数模2取余数b(例如crc32的除数0x1EDC6F41),
b.发送数据为a+b,长度len(a)+len(b)
然后发送给目标:
接收之后:
1.对收到的数据 用指定除数(如过程a)进行模2取余数b,
2.如果余数为0,则效验成功,否则失败
区中模2除法取余核心为代码:思路使用deque,然后pushback,分别异或算法
代码如下:
// CRC.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
// #include <iostream>
#include <vector>
#include <math.h>
#include <cmath>
#include <deque>
using namespace std; //二进制的位数
int GetBitNum(int n)
{
int i = 0;
while (n > 0)
{
n = n >> 1;
i++;
}
return i;
}
bool GetBitAt(int n, int pos)
{
int m = 1 << pos;
int nRes = n & m;
return (n & m) > 0;
}
int Left(int n, int count)
{
int num = GetBitNum(n);
return n >> (num - count);
}
int Right(int n, int count)
{
int n1 = n >> count;
n1 = n1 << count;
return n ^ n1;
} int Mod(int m, int n)
{
std::deque<int> dqM;
std::deque<int> dqN; int nlen = GetBitNum(n);
int mlen = GetBitNum(m);
for (int i = 0; i < nlen; i++)
{
int nb = GetBitAt(n, i) ? 1 : 0;
cout << nb;
dqN.push_front(nb);
}
cout << endl;
for (int i = 0; i < mlen; i++)
{
//
int nb = GetBitAt(m, i) ? 1 : 0;
dqM.push_front(nb);
cout << nb;
}
cout << endl; while (dqM.size() > dqN.size())
{
//这里做运算
for (int i = 0; i < dqN.size(); i++)
{
dqM[i] = dqM[i] ^ dqN[i];
}
while (dqM.size() > 0 && dqM.front() == 0)
{
dqM.pop_front();
}
}
int t = 0;
for (int i = 0; i < dqM.size(); i++)
{
t += 2 << (dqM.size() - i - 1);
}
return t;
}
void printbool(bool bPrint)
{
if (bPrint)
cout << 1;
else
cout << 0;
} int main()
{
/*int n = 1 ^ 1;
cout << n << endl;
n = 1 ^ 0;
cout << n << endl;
n = 0 ^ 1;
cout << n << endl;
n = 0 ^ 0;
cout << n << endl;*/ //m为要发送的数据
//n为多项式 1001:= x4+1:
//余数为要发送的数
//效验过程, 发送的数据除以多项式 余数为0即校验成功 int m = 12344556;
int n = 9;
int mod = Mod(m, n);
//发送的数字为m+n
int mlen = GetBitNum(m);
//长度
int nReal = mlen + GetBitNum(mod); int nRealSend = m << GetBitNum(mod) + m;
int nn = Mod(nRealSend, n);
cout << nn << endl; return 0;
}
CRC 循环冗余效验的更多相关文章
- Redis源代码分析(23)--- CRC循环冗余算法RAND随机数的算法
他今天就开始学习Redis源代码的一些工具来实现,在任何一种语言工具.算法实现的原理应该是相同的,一些比較经典的算法.比方说我今天看的Crc循环冗余校验算法和rand随机数产生算法. CRC算法全称循 ...
- CRC循环冗余检测C语言实现----花了几天时间乱写的
由于笔者目前正在上计算机网络的课,老师要我们编一下crc的循环检测过程,所以我想着刚好在学c,那就随便看看写不写的了,首先百度了一下网上资料,基本都是用位移运算符实现的,由于本人懒得去看一下位移运算, ...
- crc循环冗余校验
循环冗余校验(Cyclic Redundancy Check, CRC)是一种根据网络数据包或电脑文件等数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误.它 ...
- LRC CRC 纵向冗余码校验
LRC CRC 纵向冗余码校验 2010-01-26 11:00:15| 分类: 电气 | 标签: |字号大中小 订阅 1.LRC校验 LRC域是一个包含一个8位二进制值的字节.LRC值由 ...
- crc循环冗余检验
CRC(Cyclic Redundancy Check):循环冗余检验.在链路层被广泛使用的检错技术. CRC原理: 1.发送端 1.1.在发送端先将数据分组,每组k个数据.假定要传送的数据是M. 1 ...
- CRC碰撞
循环冗余效验(Cyclic Redundancy Check, CRC) 是一种根据网络数据包或电脑文件等数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误. ...
- [技术栈]CRC校验原理及C#代码实现CRC16、CRC32计算FCS校验码
1.CRC.FCS是什么 CRC,全称Cyclic Redundancy Check,中文名称为循环冗余校验,是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术,主要用来检 ...
- PNG图片数据解析
PNG是一种非常流行的图片格式,它不仅支持透明效果,而且图片数据经过了压缩处理,所以广泛用于web等应用. PNG的文件格式: PNG文件中的数据,总是以一个固定的8个字节开头: (图片来自http: ...
- 关于图片的PNG与JPG、JIF格式
一:GIF(Graphics Interchange Format) 简介 GIF图形交换格式是一种位图图形文件格式,以8位色(即256种颜色)重现真彩色的图像. 它实际上是一种压缩文档,采用LZW压 ...
- 前端进阶试题css(来自js高级前端开发---豪情)既然被发现了HOHO,那我就置顶了嘿嘿!觉得自己技术OK的可以把这套题目做完哦,然后加入高级前端的社区咯
http://www.cnblogs.com/jikey/p/4426105.html js高级前端开发加群方法(此群很难进,里面纯技术,严禁广告,水群) 完整题目做完发邮箱(jikeytang@16 ...
随机推荐
- k8s 1.24 service account 版本以后怎么获取永不过期token?
问题产生背景: 一个服务操作多个k8s集群, 这个时候就会出现授权问题.k8s 1.24版本之前sa账号产生的token在secret中是永久不过期的.在1.24版本以后secret将不再保留toke ...
- SwiftUI(一)- VStack、HStack、ZStack布局
SwiftUI是什么 懒得写,直接找了一篇博客: 初识 SwiftUI 三种布局 SwiftUI包括三种布局: VStack: 纵向布局,默认居中对齐 HStack: 横向布局,默认居中对齐 ZSta ...
- 【工作记录】JDBC连接MySQL,跨时区调查CST转Asia/Shangha
根据业务要求,不同的国家设置jvm参数,来确定当前时区. // -Duser.timezone=Asia/Kolkata 印度加尔各答 GMT+05:30 // -Duser.timezone=Asi ...
- js 禁用右键菜单和禁止复制
大江东去,浪淘尽,千古风流人物.故垒西边,人道是,三国周郎赤壁.乱石穿空,惊涛拍岸,卷起千堆雪.江山如画,一时多少豪杰.遥想公瑾当年,小乔初嫁了,雄姿英发.羽扇纶巾,谈笑间,樯橹灰飞烟灭.故国神游,多 ...
- git基础命令 gitHub
git 和 gitHub git : 本地项目版本管理工具 gitHub : 相当于一个有很多功能的百度云盘,存储本地项目版本,管 ...
- dubbo~全局异常拦截器的使用与设计缺陷
异常拦截器ExceptionMapper 在JAX-RS(Java API for RESTful Web Services)中,ExceptionMapper接口用于将Java异常映射到HTTP响应 ...
- CSP-S2023 题解
CSP-S 2023 题解 密码锁 发现总状态数只有 \(10^5\) 个,枚举 \(O(n)\) 暴力判断即可,复杂度 \(O(10^5 n)\). 或者每一个状态只对应了 \(81\) 个状态,枚 ...
- .NET5 ASP.NET CORE 发布到IIS 文件无法替换
由于默认是:进程内托管.要在IIS里停止网站,才能替换文件. 建议解决方案是:进程外(out-of-process)托管 记事本修改项目的 .csproj 文件(或在VS上,选中web项目,右键-编 ...
- Vue学习:19.插槽实例
来个简单示例练练手吧. 实例:插槽实例 思路 在封装表格组件时,通常使用默认插槽和作用域插槽来处理固定的自定义结构. 代码 根组件(APP.vue) <template> <div& ...
- 面试官:谈谈对SpringAI的理解?
Spring AI 已经发布了好长时间了,目前已经更新到 1.0 版本了,所以身为 Java 程序员的你,如果还对 Spring AI 一点都不了解的话,那就有点太落伍了. 言归正传,那什么是 Spr ...