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 循环冗余效验的更多相关文章

  1. Redis源代码分析(23)--- CRC循环冗余算法RAND随机数的算法

    他今天就开始学习Redis源代码的一些工具来实现,在任何一种语言工具.算法实现的原理应该是相同的,一些比較经典的算法.比方说我今天看的Crc循环冗余校验算法和rand随机数产生算法. CRC算法全称循 ...

  2. CRC循环冗余检测C语言实现----花了几天时间乱写的

    由于笔者目前正在上计算机网络的课,老师要我们编一下crc的循环检测过程,所以我想着刚好在学c,那就随便看看写不写的了,首先百度了一下网上资料,基本都是用位移运算符实现的,由于本人懒得去看一下位移运算, ...

  3. crc循环冗余校验

    循环冗余校验(Cyclic Redundancy Check, CRC)是一种根据网络数据包或电脑文件等数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误.它 ...

  4. LRC CRC 纵向冗余码校验

    LRC CRC 纵向冗余码校验   2010-01-26 11:00:15|  分类: 电气 |  标签: |字号大中小 订阅  1.LRC校验  LRC域是一个包含一个8位二进制值的字节.LRC值由 ...

  5. crc循环冗余检验

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

  6. CRC碰撞

    循环冗余效验(Cyclic Redundancy Check, CRC) 是一种根据网络数据包或电脑文件等数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误. ...

  7. [技术栈]CRC校验原理及C#代码实现CRC16、CRC32计算FCS校验码

    1.CRC.FCS是什么 CRC,全称Cyclic Redundancy Check,中文名称为循环冗余校验,是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术,主要用来检 ...

  8. PNG图片数据解析

    PNG是一种非常流行的图片格式,它不仅支持透明效果,而且图片数据经过了压缩处理,所以广泛用于web等应用. PNG的文件格式: PNG文件中的数据,总是以一个固定的8个字节开头: (图片来自http: ...

  9. 关于图片的PNG与JPG、JIF格式

    一:GIF(Graphics Interchange Format) 简介 GIF图形交换格式是一种位图图形文件格式,以8位色(即256种颜色)重现真彩色的图像. 它实际上是一种压缩文档,采用LZW压 ...

  10. 前端进阶试题css(来自js高级前端开发---豪情)既然被发现了HOHO,那我就置顶了嘿嘿!觉得自己技术OK的可以把这套题目做完哦,然后加入高级前端的社区咯

    http://www.cnblogs.com/jikey/p/4426105.html js高级前端开发加群方法(此群很难进,里面纯技术,严禁广告,水群) 完整题目做完发邮箱(jikeytang@16 ...

随机推荐

  1. github加速与添加ssh密钥

    part1-github加速 此处推荐Fetch GitHub Hosts,文章的中间位置有手动添加dns的内容,十分完备,此处不赘述.不知道是不是我家网络抽风,总是得代理才能进githubQAQ难受 ...

  2. 前端项目npm install安装报错:code ERESOLVE ERESOLVE could not resolve

    背景:使用npm 安装依赖的时候,发现报了如下的错误: npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tr ...

  3. C语言常用数学函数

    目录 C语言常用数学函数(头文件#include "math.h") abs()函数 labs()函数 fabs()函数 floor()函数 floorf() floorl() c ...

  4. codemirror-editor-vue3 编辑器只要换行保存就会有小红点

    先看示例 找了篇博客写的贼详细 https://blog.csdn.net/xujingyiss/article/details/118992763 只要设置这二个        let conten ...

  5. monaco-editor 实现SQL编辑器

    原文链接:https://www.yuque.com/sxd_panda/antv/editor 安装 yarn add monaco-editor 或 npm install monaco-edit ...

  6. ETL工具-nifi干货系列 第十四讲 nifi处理器PublishKafka实战教程

    1.kettle的kafka生产者叫kafka producer,nifi中的相应处理器为PublishKafka,如下图所示: 可以很清楚的看到PublishKafka处理器支持多个版本的kafka ...

  7. java多线程编程:你真的了解线程中断吗?

    java.lang.Thread类有一个 interrupt 方法,该方法直接对线程调用.当被interrupt的线程正在sleep或wait时,会抛出 InterruptedException 异常 ...

  8. python logging去掉selenium大量的日志

    问题 二次封装logging模块,设置级别为DEBUG,默认所有级别的日志都可以收集到:在发起ui自动化,打开浏览器输入网址,进行页面操作时,打印了大量的connectionpool.remote_c ...

  9. 读懂反向传播算法(bp算法)

    原文链接:这里 介绍 反向传播算法可以说是神经网络最基础也是最重要的知识点.基本上所以的优化算法都是在反向传播算出梯度之后进行改进的.同时,也因为反向传播算法是一个递归的形式,一层一层的向后传播误差即 ...

  10. LaravelLumen 分组求和问题 where groupBy sum

    在Laravel中使用分组求和,如果直接使用Laravel各数据库操作方法,应该会得出来如下代码式: DB::table('table_a') ->where('a','=',1) ->g ...