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

基于Hutool的Merkle树hash值生成工具

SHAUtil工具

package com.blockchain.qgy.util;import com.xiaoleilu.hutool.crypto.digest.DigestUtil;
import org.apache.commons.codec.binary.Hex;import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;/**** 生成SHA-256的工具** @author QGY**/
public class SHAUtil {/*** function 利用apache commons-codec的工具类实现SHA-256* @param plainText:明文* @return 密文*/public static String getSHA256BasedMD(String plainText){MessageDigest messageDigest;String encdeStr = "";try {messageDigest = MessageDigest.getInstance("SHA-256");byte[] hash = messageDigest.digest(plainText.getBytes(StandardCharsets.UTF_8));encdeStr = new String(Hex.encodeHex(hash));} catch (Exception e){e.printStackTrace();}return encdeStr;}/*** function 利用Hutool工具类实现SHa-256加密* @param plainText:明文* @return 密文*/public static String sha256BasedHutool(String plainText){return DigestUtil.sha256Hex(plainText);}
}

Merkle树hash值生成工具

package com.blockchain.qgy.util;import java.util.ArrayList;
import java.util.List;
import java.util.Objects;/**** merkle树的对应工具** @author QGY**/
public class MerkleTreeUtil {/*** function 获取根节点的hash值* @param hashList:非根节点的hash值的树状数组* @return 根节点的hash值*/public static String getTreeNodeHash(List<String> hashList){//判断入参if(Objects.isNull(hashList) || hashList.size() == 0) return null;while (hashList.size() != 1) {hashList = getMerkleNodeList(hashList);}//找出根节点return hashList.get(0);}/*** function 根据非根节点将叶子节点的hash值处理成其父亲节点的hash值* @param hashList:非根节点的hash值的树状数组* @return 非根节点的hash值集合(处理后)*/private static List<String> getMerkleNodeList(List<String> hashList) {//判断入参if(Objects.isNull(hashList) || hashList.size() == 0) return hashList;List<String> merkleNodeList = new ArrayList<>();int index = 0;int length = hashList.size();//处理hash值树状数组while (index < length) {//1.获取左孩子节点的hash值String left = hashList.get(index++);//2.获取右孩子节点的hash值String right = "";if (index < length) {right = hashList.get(index++);}//计算左右孩子节点的父亲节点的hash值String currHash = SHAUtil.sha256BasedHutool(left.concat(right));merkleNodeList.add(currHash);}return merkleNodeList;}
}

对Merkle树的简单说明

       Merkle树是一种数据结构,它是一种哈希树的变体。它由计算机科学家Ralph Merkle在1979年提出。Merkle树的主要目的是验证大量数据的完整性。

        Merkle树的构建过程是通过对原始数据块逐层进行哈希计算来完成的。首先,原始数据被分成固定大小的块。然后,每个块都通过一个哈希函数计算出一个固定长度的哈希值。这些哈希值再通过哈希函数再次计算,直到最后只剩下一个哈希值,这个哈希值被称为根哈希。根哈希是Merkle树的根节点。

        Merkle树的特点是它的任何部分数据的一点改变都会导致整个树的根哈希值发生变化。这使得Merkle树非常适合于验证大量数据的完整性。通过比较根哈希值和任意子节点的哈希值,可以快速确定数据是否被篡改。

        Merkle树在许多领域得到了广泛应用,特别是在密码学和区块链中。在密码学中,Merkle树用于验证数字证书的完整性。在区块链中,Merkle树用于验证交易的有效性,以及验证区块的完整性。通过使用Merkle树,可以提高数据的安全性和可靠性。

依赖坐标

<dependency><groupId>com.xiaoleilu</groupId><artifactId>hutool-all</artifactId><version>3.0.9</version>
</dependency>

相关文章:

基于Hutool的Merkle树hash值生成工具

SHAUtil工具 package com.blockchain.qgy.util;import com.xiaoleilu.hutool.crypto.digest.DigestUtil; import org.apache.commons.codec.binary.Hex;import java.nio.charset.StandardCharsets; import java.security.MessageDigest;/**** 生成SHA-256的工具** author QGY*…...

Windows系统本地部署deepseek 更改目录

本地部署deepseek 无论是mac还是windows系统本地部署deepseek或者其他模型的命令和步骤是一样的。 可以看: 本地部署deepsek 无论是ollama还是部署LLM时候都默认是系统磁盘&#xff0c;对于Windows系统&#xff0c;我们一般不把应用放到系统盘&#xff08;C:&#xff09;而是…...

深度学习篇---数据存储类型

文章目录 前言第一部分&#xff1a;C语言中的数据存储类型1. char&#xff08;通常是8位&#xff09;优点缺点 2. short&#xff08;通常是16位&#xff09;优点缺点 3. int&#xff08;通常是32位&#xff09;优点缺点 4. long&#xff08;通常是32位或64位&#xff09;优点缺…...

可被electron等调用的Qt截图-录屏工具【源码开放】

1. 工具功能简介&#xff1a; (1)、QT5.15.2截图工具&#xff08;exe&#xff09;可单独使用或嵌入IM&#xff08;嵌入方法参照&#xff1a;https://gitee.com/lykiao/yfscreenshot_release&#xff09; (2)、支持通过Windows消息通知截图成功或取消 (3)、支持圆形、矩形、线条…...

electron 应用开发实践

参考链接&#xff1a; https://blog.csdn.net/2401_83384536/article/details/140549279...

openssl 生成证书 windows导入证书

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…...

程序员学英文之At the Airport Customs

Dialogue-1 Making Airline Reservation预定机票 My cousin works for Xiamen Airlines. 我表哥在厦航上班。I’d like to book an air ticket. 我想预定一张机票。Don’t judge a book by its cover. 不要以貌取人。I’d like to book / re-serve a table for 10. 我想预定一…...

字节iOS面试经验分享:HTTP与网络编程

字节iOS面试经验分享&#xff1a;HTTP与网络编程 &#x1f31f; 嗨&#xff0c;我是LucianaiB&#xff01; &#x1f30d; 总有人间一两风&#xff0c;填我十万八千梦。 &#x1f680; 路漫漫其修远兮&#xff0c;吾将上下而求索。 目录 字节iOS面试经验分享&#xff1a;HTT…...

游戏引擎 Unity - Unity 启动(下载 Unity Editor、生成 Unity Personal Edition 许可证)

Unity Unity 首次发布于 2005 年&#xff0c;属于 Unity Technologies Unity 使用的开发技术有&#xff1a;C# Unity 的适用平台&#xff1a;PC、主机、移动设备、VR / AR、Web 等 Unity 的适用领域&#xff1a;开发中等画质中小型项目 Unity 适合初学者或需要快速上手的开…...

前端八股CSS:盒模型、CSS权重、+与~选择器、z-index、水平垂直居中、左侧固定,右侧自适应、三栏均分布局

一、盒模型 题目&#xff1a;简述CSS的盒模型 答&#xff1a;盒模型有两种类型&#xff0c;可以通过box-sizing设置 1.标准盒模型&#xff08;content-box&#xff09;:默认值&#xff0c;宽度和高度只包含内容区域&#xff0c;不包含内边距、边框和外边距。 2.边框盒模型&a…...

Linux网络 | 网络层IP报文解析、认识网段划分与IP地址

前言&#xff1a;本节内容为网络层。 主要讲解IP协议报文字段以及分离有效载荷。 另外&#xff0c; 本节也会带领友友认识一下IP地址的划分。 那么现在废话不多说&#xff0c; 开始我们的学习吧&#xff01;&#xff01; ps&#xff1a;本节正式进入网络层喽&#xff0c; 友友们…...

服务器虚拟化实战:架构、技术与最佳实践

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 1. 引言 服务器虚拟化是现代 IT 基础设施的重要组成部分&#xff0c;通过虚拟化技术可以提高服务器资源利用率、降低硬件成本&am…...

(leetcode 213 打家劫舍ii)

代码随想录&#xff1a; 将一个线性数组换成两个线性数组&#xff08;去掉头&#xff0c;去掉尾&#xff09; 分别求两个线性数组的最大值 最后求这两个数组的最大值 代码随想录视频 #include<iostream> #include<vector> #include<algorithm> //nums:2,…...

[C语言日寄] <stdio.h> 头文件功能介绍

在C语言的世界里&#xff0c;<stdio.h> 是一个极其重要的头文件&#xff0c;它提供了标准输入输出功能&#xff0c;是C语言程序与用户交互的核心工具。今天&#xff0c;我们就来深入探讨 <stdio.h> 的功能、使用注意事项以及它的拓展应用。 功能介绍 <stdio.h…...

一文读懂 Faiss:开启高维向量高效检索的大门

一、引言 在大数据与人工智能蓬勃发展的当下&#xff0c;高维向量数据如潮水般涌现。无论是图像、音频、文本&#xff0c;还是生物信息领域&#xff0c;都离不开高维向量来精准刻画数据特征。然而&#xff0c;在海量的高维向量数据中进行快速、准确的相似性搜索&#xff0c;却…...

【二叉搜索树】

二叉搜索树 一、认识二叉搜索树二、二叉搜索树实现2.1插入2.2查找2.3删除 总结 一、认识二叉搜索树 二叉搜索树&#xff08;Binary Search Tree&#xff0c;简称 BST&#xff09;是一种特殊的二叉树&#xff0c;它具有以下特征&#xff1a; 若它的左子树不为空&#xff0c;则…...

R语言统计分析——ggplot2绘图5——拟合光滑曲线

参考资料&#xff1a;R语言实战【第2版】 ggplot2包可以通过计算统计函数并添加到图形中。例如&#xff1a;分级数据、计算密度、轮廓和分位数等。这里我们重点将添加平滑曲线&#xff08;线性、非线性和非参数&#xff09;到散点图中。 我们可以使用geom_smooth()函数来添加一…...

疯狂拆单词01

疯狂拆单词01 有些单词是可以拆的&#xff0c;不&#xff0c;是可以反复拆的&#xff0c;拆着拆着&#xff0c;你的词汇量&#xff0c;就能快速飙升&#xff1a; 【】disappointment disappointment n.失望&#xff0c;沮丧&#xff0c;扫兴 &#xff08;ment-名缀&#xff0…...

高效学习方法分享

高效学习方法分享 引言 在信息高速发展的今天&#xff0c;学习已经成为每个人不可或缺的一部分。你是否曾感到学习的疲惫&#xff0c;信息的爆炸让你无从下手&#xff1f;今天&#xff0c;我们将探讨几种高效的学习方法&#xff0c;帮助你从中找到适合自己的学习之道。关于学…...

01.双Android容器解决方案

目录 写在前面 一&#xff0c;容器 1.1 容器的原理 1.1.1 Namespace 1.1.2 Cgroups&#xff08;Control Groups&#xff09; 1.1.3 联合文件系统&#xff08;Union File System&#xff09; 1.2 容器的应用 1.2.1 微服务架构 1.2.2 持续集成和持续部署&#xff08;CI/…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...