当前位置: 首页 > news >正文

使用Java计算Linux系统中sum命令得到的校验值

目录

■相关知识

・sum 命令

・BSD校验算法是什么

・BSD校验算法 和hash值 有区别吗

・BSD校验算法,为什么是BSD,这个缩写代表什么

■Java代码

■效果


======

■相关知识

・sum 命令

・BSD校验算法是什么

BSD校验算法(BSD checksum algorithm)是一种简单的校验算法,通常用于计算数据的校验和。它的计算方法是将数据分成多个16位的块,然后对每个块进行累加求和,最后对结果取反得到校验和。在网络通信或数据传输中,BSD校验算法常用于检测数据传输过程中的错误或完整性。

具体来说,BSD校验算法的步骤如下:

  1. 将数据分成16位的块(一个字),若数据长度为奇数则最后一个字节作为单独的8位块处理。
  2. 将每个16位块的值与上一个块的值相加,结果存储在一个累加器中。
  3. 如果累加器溢出(即超过16位),则将溢出的部分加回到累加器中。
  4. 对最终的累加器值取反作为校验和。

通过比较发送数据的校验和和接收数据的校验和,可以检测数据在传输过程中是否发生了错误或丢失。BSD校验算法虽然简单,但在某些应用场景下仍然有效且高效。

・BSD校验算法 和hash值 有区别吗

是的,BSD校验算法和哈希值有一些重要的区别。

  1. 目的不同:BSD校验算法用于检测数据传输过程中的错误或完整性,而哈希值通常用于验证数据的一致性和唯一性。

  2. 处理方式不同:BSD校验算法是通过对数据的累加求和,然后取反得到校验和,而哈希值是通过一种特定的哈希函数对数据进行转换,生成固定长度的摘要。

  3. 冲突的处理:哈希值具有较低的冲突概率,通常用于验证唯一性和一致性;而BSD校验算法并不会关心是否有冲突,只是用来检测数据传输过程中是否有错误。

  4. 安全性区别:哈希值通常用于密码学、数字签名等安全领域,因此哈希函数通常需要满足更严格的安全性要求;而BSD校验算法主要用于基本的数据完整性检测,不具备哈希函数在安全性方面的特性。

总的来说,BSD校验算法和哈希值在用途、处理方式、安全性等方面都有较大的区别,因此在选择使用时需要根据具体的情况进行考虑。

・BSD校验算法,为什么是BSD,这个缩写代表什么

BSD校验算法中的BSD缩写代表的是"Berkeley Software Distribution",是指由加州大学伯克利分校(UC Berkeley)开发和发布的操作系统和软件套件的系列版本。BSD校验算法最初是在BSD操作系统中引入并广泛使用的,因此得名为BSD校验算法。在计算机科学领域中,BSD也常用来指代与伯克利相关的各种技术和项目。

■Java代码

sum 工具和 BSD 校验和有所不同。对于 BSD 校验和,可以使用以下的代码来计算:

具体来说,BSD校验算法的步骤如下:

  1. 将数据分成16位的块(一个字),若数据长度为奇数则最后一个字节作为单独的8位块处理。
  2. 将每个16位块的值与上一个块的值相加,结果存储在一个累加器中。
  3. 如果累加器溢出(即超过16位),则将溢出的部分加回到累加器中。
  4. 对最终的累加器值取反作为校验和。
package com.sxz.study.sum;import java.io.FileInputStream;
import java.io.IOException;public class BSDSumExample {private static int block = 0;public static void main(String[] args) {String filePath = "C:\\Users\\sxz\\Music\\失恋阵线联盟.ogg";// 62827try {byte[] data = readFile(filePath);long checksum = BSDChecksum(data);System.out.println("BSD checksum: " + checksum + "-----------" + block);} catch (IOException e) {e.printStackTrace();}}private static byte[] readFile(String filePath) throws IOException {FileInputStream fis = null;byte[] data = null;try {fis = new FileInputStream(filePath);int size = fis.available();data = new byte[size];fis.read(data);double result = Math.ceil((double) size / 1024);block = (int)result;} finally {if (fis != null) {fis.close();}}return data;}private static long BSDChecksum(byte[] data) {long checksum = 0;for (int i = 0; i < data.length; i++) {// 更新校验和,使用BSD校验和算法中的一次更新操作//       checksum >> 1:将checksum无符号右移一位,相当于将其除以2并丢弃余数。//       ((checksum & 1) << 15) :得到了checksum最低位的值,并将其左移15位。//              checksum & 1 是一个按位与操作。它是用来检查checksum的最低位(最右边的位)是0还是1。//              如果最低位为1,则结果为1;如果最低位为0,则结果为0。checksum = (checksum >> 1) + ((checksum & 1) << 15);// 将当前字节数据加入到校验和中//       & 0xFF 作用 //       在Java中,byte类型是有符号的,其取值范围为-128到+127。//       而在进行校验和计算的过程中,需要将每个byte类型的数据当做无符号数进行处理,即0到255。checksum += (data[i] & 0xFF);// 将校验和限制在一个16位无符号整数范围内checksum &= 0xFFFF;}return checksum;}
}

==

示例代码使用了修正后的 BSDChecksum() 方法来计算 BSD 校验和。

===

■效果

---

===

相关文章:

使用Java计算Linux系统中sum命令得到的校验值

目录 ■相关知识 ・sum 命令 ・BSD校验算法是什么 ・BSD校验算法 和hash值 有区别吗 ・BSD校验算法&#xff0c;为什么是BSD&#xff0c;这个缩写代表什么 ■Java代码 ■效果 &#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d; ■相关知识 ・…...

鸿蒙开发电话服务:【 @ohos.telephony.sms (短信服务)】

短信服务 说明&#xff1a; 本模块首批接口从API version 6开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import sms from ohos.telephony.sms;sms.createMessage createMessage(pdu: Array, specification: string, callback: Asy…...

算法02 递归算法及其相关问题【C++实现】

递归 在编程中&#xff0c;我们把函数直接或者间接调用自身的过程叫做递归。 递归处理问题的过程是&#xff1a;通常把一个大型的复杂问题&#xff0c;转变成一个与原问题类似的&#xff0c;规模更小的问题来进行求解。 递归的三大要素 函数的参数。在用递归解决问题时&…...

Sermant标签路由能力在同城双活场景的应用

作者&#xff1a;聂子雄 华为云高级软件工程师 摘要&#xff1a;目前应用上云已成为趋势&#xff0c;用户也对应用在云上的高可靠方案有更高追求&#xff0c;目前同城双活场景作为应用高可靠方案中的一种常见实践方案&#xff0c;对微服务流量提出了数据中心亲和性的要求&…...

javascript-obfuscator混淆

安装 npm install javascript-obfuscator -g 配置 重度混淆&#xff0c;性能低 性能下降50-100% { "compact": true, "controlFlowFlattening": true, "controlFlowFlatteningThreshold": 0.75, // 设置为0到1之间的值 "deadCodeI…...

GitHub项目里的api

在一个GitHub项目中提到的"api"通常指的是该项目提供的应用程序编程接口&#xff08;Application Programming Interface&#xff09;。这意味着该项目包含了一套规则和工具&#xff0c;允许其他开发者通过代码调用该接口来与项目功能互动、获取数据或执行特定任务。…...

k8s可练习实验分享

实验环境介绍&#xff1a;单master节点&#xff0b;3node节点 环境已提前配置完毕&#xff0c;如果你环境还未做&#xff0c;请移步 k8s集群V1.27.3安装 在 k8s 上可以做许多实验来提升你的动手能力和理解。以下是一些常见且有用的实验项目&#xff1a; 1、部署一个简单的应用…...

浏览器支持http-flv协议

Google Chrome 浏览器和Microsoft Edge 浏览器原生并不支持 HTTP-FLV 协议。HTTP-FLV 主要与 Flash Player 相关&#xff0c;而 Flash Player 已经在 2020 年底停止支持&#xff0c;并且 Microsoft Edge 也逐步淘汰了对 Flash 的支持。 flv.js 利用 HTML5 和 Media Source Exte…...

一千题,No.0077(计算谱半径)

在数学中&#xff0c;矩阵的“谱半径”是指其特征值的模集合的上确界。换言之&#xff0c;对于给定的 n 个复数空间的特征值 { a1​b1​i,⋯,an​bn​i }&#xff0c;它们的模为实部与虚部的平方和的开方&#xff0c;而“谱半径”就是最大模。 现在给定一些复数空间的特征值&a…...

安卓/iOS/Linux系统影音边下边播P2P传输解决方案

在当今的数字时代&#xff0c;IPTV 影音行业正经历着快速的发展和变革&#xff0c;但影音行业的流量带宽成本一直很高&#xff0c;有没有什么办法既能保证现有的用户观看体验&#xff0c;又能很好降低流量带宽成本呢? P2P技术可能是一个很好的选择&#xff0c;它不仅仅可以提…...

STORM论文阅读笔记

这是篇NIPS2023的 world model 论文文章提出&#xff0c;WM的误差会在训练过程中积累从而影响policy的训练&#xff0c;向WM中加噪声可以改善这一点。其他的流程和IRIS差不多&#xff0c;差别在以下几点&#xff1a; image encoder&#xff0c;IRIS用的VQVAE, 本文用的是VAE&am…...

Web前端遇到的难题:挑战与突破之路

Web前端遇到的难题&#xff1a;挑战与突破之路 在快速发展的互联网时代&#xff0c;Web前端技术作为连接用户与应用程序的桥梁&#xff0c;扮演着举足轻重的角色。然而&#xff0c;在实际开发中&#xff0c;Web前端开发者往往会遇到诸多难题。本文将从四个方面、五个方面、六个…...

C#防止多次注册事件

事件声明和使用部分的代码&#xff0c;防止多次注册事件主要通过判断事件中类型的委托实例是否为空实现 public class ReRegisterEvent {public delegate void Mydelegate(string message);private Mydelegate? mydel;public event Mydelegate Myevent{add{if (mydel null){…...

【UML用户指南】-16-对高级结构建模-构件

目录 1、概念 2、构件与接口 3、可替换性 4、组织构件 5、端口 6、内部结构 6.1、部件 6.2、连接件 7、常用建模技术 7.1、对结构类建模 7.2、对API建模 构件是系统中逻辑的并且可替换的部分&#xff0c;它遵循并提供对一组接口的实现。好的构件用定义良好的接口来定…...

双Token方案实现Token自动续期(基于springboot+vue前后端分离项目)

文章目录 前言一、双Token方案介绍1. 令牌类型与功能2.双Token方案的优点3.实现流程 二、具体实现1.后端实现1.1 jwt工具类1.2 响应工具类1.3 实体类1.4 过滤器1.5 controller1.6 启动类 2、前端实现2.1 登录页面2.2 index页面2.3 请求拦截器和响应拦截器 效果展示 前言 更多j…...

别太小看“静态免杀“

0x01 简述 免杀总体来说可分为两种&#xff0c;静态免杀/动态免杀。往往来说&#xff0c;我们更注重于在内部代码层面实现一些免杀技巧&#xff0c;但在有些时候&#xff0c;动态免杀静态免杀以"打组合拳"的方式效果往往会更出人所料。 当我们的程序生成后&#xf…...

SQL server 内连接 左连接 右连接 全连接 语句

在SQL Server中&#xff0c;连接&#xff08;JOIN&#xff09;操作用于从两个或多个表中检索相关数据。内连接、左连接、右连接和全连接是最常用的几种连接类型。下面详细介绍每种连接的用法和区别&#xff1a; 1. 内连接 (INNER JOIN) 内连接只返回两个表中满足连接条件的匹…...

k8s中的pod域名解析失败定位案例

问题描述 我在k8s中启动了一个Host网络模式的pod&#xff0c;这个pod的域名解析失败了。 定位步骤 敲kubectl exec -it [pod_name] -- bash进入pod后台&#xff0c;查看/etc/resolv.conf&#xff0c;发现nameserver配的有问题。这里我预期的nameserver应该使用宿主机的&…...

jingxiang制作

文章目录 jingxiang制作为什么需要jingxiang制作如何进行jingxiang制作 快照方式制作jingxiang制作命令do cker commit 快照制作jingxiang创建临时工作目录编写一个实例代码启动一个容器替换国内软件源安装编译软件源代码拷贝到容器中编译运行提交为一个jingxiang测试是否可以正…...

【数据结构】线性表之《顺序表》超详细实现

顺序表 一.数据结构1.逻辑结构2.物理结构 二.顺序表的分类1.静态顺序表2.动态顺序表 三.顺序表的实现1.创建顺序表2.初始化顺序表3.判断是否扩容4.打印顺序表5.插入操作1.头插2.尾插3.按照下标插入 6.删除操作1.头删2.尾删3.按照下标删除 7.查找数据8.修改数据9.清空顺序表10.销…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下&#xff0c;限制某个 IP 的访问频率是非常重要的&#xff0c;可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案&#xff0c;使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

通过MicroSip配置自己的freeswitch服务器进行调试记录

之前用docker安装的freeswitch的&#xff0c;启动是正常的&#xff0c; 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...

【堆垛策略】设计方法

堆垛策略的设计是积木堆叠系统的核心&#xff0c;直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法&#xff0c;涵盖基础规则、优化算法和容错机制&#xff1a; 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则&#xff1a; 大尺寸/重量积木在下&#xf…...