checksum 算法

2023-05-16

说明

  • checksum:总和检验码,校验和,可以理解为check(校验),sum(和)。
  • 在数据处理和通信领域,通过一定算法对传输的数据进行求和以校验数据的完整性和准确性。

使用

算法

  • 求和的算法大致是确定的,但是一些细节不是很重要,例如:校验和使用几个字节存储,只要收发两边处理规则一样就行。
  • 网上示例,如下:
USHORT CICMP::CheckSum(USHORT *buff,int Size)
{
    unsigned long cksum = 0;
    //将数据以字为单位累加到cksum中
    while (Size > 1)
    {
        cksum += *buff;
        Size -= sizeof(USHORT);
    }
    //如果为奇数,将最后一个字节扩展到双字,在累加到cksum中
    if (Size)
    {
        cksum += *(UCHAR*)buff;
    }
    //将cksum的高16位和低16位相加,取反后得到效验和
    cksum = (cksum >> 16) + (cksum & 0xffff);
    cksum += (cksum >> 16);
    return (USHORT)(~cksum);//位运算符号:位取反!比如有int a=3;则先把十进制数3,转化为二进制数,即00000011.那么~a=11111100
}

流程

  1. 在数据发送端对数据进行checksum。
  2. 将计算出的checksum取反,存放在数据末尾或其它位置发送给接收端。
  3. 接收端收到数据后对所有数据进行checksum,如果checksum为0表示数据正确。

原理

  • checksum为0表示数据正确原因:除了数据中的checksum值,其它数据的sum值等于checksum取反,两值相加值的所有位为1,再取反后即为0,也就是所有数据的checksum为0。
  • 如果所有数据的checksum不为0说明数据发生过变化,因此数据是无效的。

个人理解

  1. checksum算法是不可靠的,只能在要求不是很严格的情况下使用,无法用来判断数据是否一致。
  • checksum算法中每个数据都是位置无关的,因此该算法无法检测出数据发生交换,测试可知:数据发生交换c不会影响hecksum。
  • checksum能在一些情况下使用,因为数据在发送过程中交换的可能性较小,发生0/1翻转的数据不抵消就能检测到,但是应用层一些业务逻辑出现0/1翻转抵消的情况好像挺常见,因此个人对checksum的可靠性表示怀疑。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

checksum 算法 的相关文章

  • c语言 checksum,crc校验方法,用c语言实现源代码(CRC checksum method, using C language source code).doc...

    crc校验方法 用c语言实现源代码 CRC checksum method using C language source code crc校验方法 用c语言实现源代码 CRC checksum method using C languag
  • checksum 算法

    说明 checksum xff1a 总和检验码 xff0c 校验和 xff0c 可以理解为check xff08 校验 xff09 xff0c sum xff08 和 xff09 在数据处理和通信领域 xff0c 通过一定算法对传输的数据进
  • 获取非常大的文件的 MD5 校验和

    我编写了一个脚本 该脚本读取目录中的所有文件并返回每个文件的 md5 哈希值 但是 对于相当大的文件 它不会呈现任何内容 我假设解释器为最大处理时间设置了一些值 并且由于获取该值需要很长时间 因此它只是跳到其他文件 有没有办法通过 PHP
  • 大多数静态数据流的 CRC 计算

    背景 我有一段内存 1024字节 最后 1020 字节始终相同 前 4 个字节将发生变化 产品的序列号 我需要计算CRC 16 CCITT 0xFFFF 起始 0x1021 掩码 对于整个内存部分 CRC WHOLE 问题 是否可以仅计算前
  • 防止向记分板提交欺诈性信息

    我正在开发 Flash 游戏的后端 我需要secure数据进入记分板 该游戏将在许多网站上以横幅广告形式托管 用户将在广告中玩游戏 然后点击进入主网站以保存其详细信息 目前我正在思考这个问题 用户玩游戏并点击提交分数 在后台 横幅将分数和原
  • 任何人都可以定义 Windows PE 校验和算法吗?

    我想用 C 实现这个 我看过这里 http www codeproject com KB cpp PEChecksum aspx http www codeproject com KB cpp PEChecksum aspx 并且我知道 I
  • 检查两个图像文件是否相同..校验和或哈希值?

    我正在做一些图像处理代码 其中我从 URL 下载一些图像 如 BufferedImage 并将其传递到图像处理器 我想避免将同一图像多次传递给图像处理器 因为图像处理操作的成本很高 图像的 URL 端点 如果它们是相同的图像 可能会有所不同
  • 32位校验和算法比CRC32质量更好?

    是否有具有以下任一功能的 32 位校验和算法 输入数据大小 碰撞的分布更加均匀 这些与 CRC32 相关 由于 32 位存储空间的限制 我实际上不依赖第一个属性 但第二次 似乎就在那里could予以改进 有任何想法吗 谢谢 我需要具体的实现
  • CRC32 校验和是如何计算的?

    也许我只是没有看到它 但 CRC32 似乎要么不必要地复杂 要么在我可以在网络上找到的任何地方都没有得到充分的解释 我知道它是消息值的基于非进位的算术除法除以 生成器 多项式的余数 但它的实际实现让我无法理解 我读了CRC 错误检测算法的轻
  • tcp 校验和和 tcp 卸载

    我正在使用原始套接字来创建我自己的套接字 我需要设置 tcp checksum 我尝试了很多参考资料 但都不起作用 我正在使用wireshark进行测试 请问你能帮帮我吗 顺便说一句 我在某处读到如果你设置 tcp checksum 0 然
  • 计算 SQL Server 中表的哈希值或校验和

    我正在尝试计算 SQL Server 2008 中整个表的校验和或哈希 我遇到的问题是该表包含 XML 列数据类型 校验和无法使用该数据类型 必须将其转换为 nvarchar第一的 所以我需要将其分解为两个问题 计算一行的校验和 模式在运行
  • Python,字典的校验和

    我正在考虑创建一个字典的校验和来知道它是否被修改 目前我有 gt gt gt import hashlib gt gt gt import pickle gt gt gt d k v k2 v2 gt gt gt z pickle dump
  • 计算 HDLC 帧的 FCS(CRC)

    我有以下框架 7e 01 00 00 01 00 18 ef 00 00 00 b5 20 c1 05 10 02 71 2e 1a c2 05 10 01 71 00 6e 87 02 00 01 42 71 2e 1a 01 96 27
  • 如何检查Paramiko是否成功将文件上传到SFTP服务器?

    我使用 Paramiko 将文件放入 SFTP 服务器 import paramiko transport paramiko Transport host port transport connect username username p
  • 使用 Javascript 的 8 位异或校验和

    我正在尝试模仿 Windows 应用程序格式化消息并发送通过 USB 通过 UART 传输到显示该消息的设备 该应用程序计算checksum并将其粘贴到消息后面 否则设备将不会接受该命令 校验和不是 crc8 校验和 但它是什么 使用 US
  • 使用 powershell 对整个目录进行 MD5 校验和哈希

    我正在尝试使用 powershell 为整个目录生成 MD5 校验和 在 Linux 上 有一个非常有效的 1 liner 如下所示 tar cf 某个目录 md5和 我了解到 tar 现在是 Windows 10 的一部分 并且可以在 P
  • 如何在 Maven 中创建校验和然后将其输出到文本文件?

    还在学习如何使用Maven 我想知道是否有办法做到checksum在生成的WAR file The Maven目标是package 我想要实现的是得到一个checksum价值 包装的WAR文件 与打包文件一起放入文本文件中 提前致谢 让它与
  • 同一个 javac 编译器是否可以编译同一组源文件,但生成不同校验和的类文件?

    我试图比较这个结果 在蚂蚁中
  • 您能解释一下 md5 和 modulo 的这些令人不安的异常情况吗?

    好吧 标题确实很主观 但这正是我的问题所在 背景是我想将静态 Web 内容的点击均匀地分布在定义数量的缓存服务器上 此外 向客户端的交付应该会加快 因为多个域正在使用中并且请求不会相互阻塞 我也不需要经典的负载均衡器 而是立即在我的 htm
  • 防止 .exe 时间戳发生变化

    有谁知道如何防止可执行文件的时间戳更改 我正在尝试为 exe 生成一致的哈希代码 但我认为时间戳可能会阻止这种情况发生 每次我重新编译代码 VS C 时 FastSum 都会生成不同的校验和 Thanks PE 文件格式 如 EXE 中 具

随机推荐

  • 什么是栈,栈存储结构详情

    什么是栈 xff0c 栈存储结构详情 同顺序表和链表一样 xff0c 栈也是用来存储逻辑关系为一对一数据的线性存储结构 xff0c 如图所示 从图1我们看到 xff0c 栈存储结构与之前学的线性存储有所差异 xff0c 这源于栈对数存和取的
  • C++cmath数学常用库中的代码介绍

    今天小编来分享一波C 43 43 cmath数学常用库中的常用代码 首先 xff0c 这些所有的代码都来自cmath库 xff0c 所以必须先引用cmath头文件 xff0c 即 xff1a include lt cmath gt 1 绝对
  • vue-cli-service Axios 持续返还401

    后端 xff1a 在登录超时或没有登录的情况 xff0c 所有请求都会拒绝并且返还HTTP状态码401 前端 xff1a 前端将认证的Token放到loadStorage中 xff0c 在认证失效时候清空 在接到HTTP状态码为401时 x
  • 载波相位测量

    1 简述GPS载波相位测量的基本原理 载波相位测量的观测量是GPS接收机所接收的卫星载波信号与接收机本振参考信号的相位差 利用接收机测定载波相位观测值 xff0c 经基线向量解算以获得两个同步观测站之间的基线向量坐标差 2 在高精度GPS测
  • PJLib开发杂谈

    去年公司搞了一个智慧乡村的项目 xff0c 其中涉及到视频监控的问题 电信提供的解决方案 xff0c 我们的平台只需要跟电信对接HLS流就可以了 这就有一个问题 xff0c 原来公司安装的监控无法接入到自己的平台 xff0c 好尴尬啊 于是
  • 开发GB28181监控平台前期准备总结

    首先得准备PJLIB的编译 xff0c 这个搜一下 xff0c 下载以后它是有VS的工程文件的 xff0c 所以编译很方便 得到这个库以后 xff0c 就可以编写SIP服务程序了 xff0c 服务程序可以验证GB28181的相关通讯流程 x
  • esp8266 丢失固件 丢失程序问题

    1 首先esp8266 丢失固件 丢失程序问题已经解决 2 解决方法 我们制作了一个固件保护主板 xff0c 提供2种供电接口 xff0c 支持5v稳压 串口电平保护 xff0c 固件保护 xff0c 反电动势保护 xff0c 支持复位按键
  • printf重定向

    1 printf与fputc 对于 printf 函数相信大家都不陌生 xff0c 第一个C语言程序就是使用 printf 函数在屏幕上的控制台打印出Hello World xff0c 之后使用 printf 函数输出各种类型的数据 xff
  • ESP32_BLUFI代码移植过程遇到的问题

    1 先是运行esp32官方给的例程 xff0c 出现了错误报错如下 xff1a esp image Image length 1053648 doesn t fit in partition length 1048576 boot Fact
  • Java 中的 Iterator 迭代器详解

    x1f366 Iterator 接口 在程序开发中 xff0c 经常需要遍历集合中的所有元素 针对这种需求 xff0c JDK 专门提供了一个接口 java util Iterator Iterator 接口也是 Java 集合中的一员 x
  • 三.【NodeJs入门学习】POST接口

    上一节我们学习了get接口 xff0c 这一节我们自己来写一下post接口 1 复习一下 先复习一下上一节中get请求的步骤 上图是在入口app js中处理get请求 xff0c 先拿到请求的url xff0c 然后设置了一个函数handl
  • 多进程和多线程比较

    原文 xff1a http blog csdn net lishenglong666 article details 8557215 很详细 对比维度 多进程 多线程 总结 数据共享 同步 数据共享复杂 xff0c 需要用IPC xff1b
  • C++ 之头文件声明定义

    最近在学习 c 43 43 在编译与链接过程中遇到了一些定义与声明的问题 经过多处查阅资料 基本解惑 现记录与此 希望让后面人少走些弯路 C 43 43 的头文件应该用什么扩展名 目前业界的常用格式如下 implementation fil
  • arduino修改串口缓冲区大小的三种办法

    由于SoftwareSerial h默认只接收64字节串行缓冲区 xff0c Arduino会将之后接收到的数据丢弃 xff0c 不满足业务需求 以下三种方法是笔者参考网上各种资料总结出来 xff0c 对于WEMOS D1 R2 xff0c
  • C语言调用libcurl的一个简单例子

    首先我们创建一个php页面 xff1a lt meta http equiv 61 span class hljs string 34 Content Type 34 span content 61 span class hljs stri
  • 【C++】类构造函数、析构函数的调用顺序「完整版」

    一 全局变量 静态变量和局部变量 全局变量在程序开始时调用构造函数 在程序结束时调用析构函数 静态变量在所在函数第一次被调用时调用构造函数 在程序结束时调用析构函数 xff0c 只调用一次 局部变量在所在的代码段被执行时调用构造函数 xff
  • linux下使用shell发送http请求

    本文主要介绍如何在linux下使用shell发送http请求 一 curl 1 get请求 curl命令默认下就是使用get方式发送http请求 curl www span class hljs preprocessor baidu spa
  • 【STL真好用】1057 Stack C++(30)

    1057 Stack 30 分 Stack is one of the most fundamental data structures which is based on the principle of Last In First Ou
  • C++学习之头文件引用

    目录结构如下 test h的定义如下 xff1a ifndef TEST H define TEST H include lt vector gt include lt string gt using namespace std class
  • checksum 算法

    说明 checksum xff1a 总和检验码 xff0c 校验和 xff0c 可以理解为check xff08 校验 xff09 xff0c sum xff08 和 xff09 在数据处理和通信领域 xff0c 通过一定算法对传输的数据进