GO语言实现简单梅克尔树根哈希值求解
1.思路
今天在看一本区块链的书籍发现了区块链头部有存储梅克尔树根哈希值,感觉这个梅克尔树根哈希值真是非常厉害,简单的一段文本就可以保证所有数据不被修改。算法思路也很简单,就自己实现了下,就是两两组合求sha256值。
2.代码
package mainimport ("crypto/sha256""encoding/hex""fmt"
)func GetHash256(str string) string {hash := sha256.New()hash.Write([]byte(str))sum := hash.Sum(nil)return hex.EncodeToString(sum)
}// 梅克尔树根哈希值计算算法
// hashs 要计算的哈希值
// 返回树根哈希值
func MerkleRoot(args []string) string {// 获取参数的个数nums := len(args)var odd stringif len(args) == 1 {return GetHash256(args[0])}// 先对所有元素进行取哈希for i, arg := range args {args[i] = GetHash256(arg)}var layer = 0 // 表示层数// 循环到args中只有一个元素为止for len(args) != 1 {// 判断参数是否是偶数if nums%2 != 0 {// 奇数if layer == 0 {// 保存最后一个元素odd = args[len(args)-1]// 删除最后一个元素args = args[0 : len(args)-1]} else {// 判断odd是否为空if len(odd) != 0 {args = append(args, odd)odd = ""}}}// 临时argstemp_args := make([]string, 0)//两两取哈希for i := 0; i < len(args)-1; i = i + 2 {temp_args = append(temp_args, GetHash256(args[i]+args[i+1]))}args = temp_argstemp_args = nillayer++}return args[0]
}
func main() {var nums = []string{"hello", "go", "i", "love"}fmt.Printf("content : %v", MerkleRoot(nums))
}
/*输出结果:layer : 0 , content : [a70c498f438b10cfbd088695fef532afd33d7f7094de8c617296d068298744ca 72b39755c651fdd470759d845addf2f7bd7ceae67e1141be234225a13fcac1b1]layer : 1 , content : [2ebccf55e07779f2d23fa765e8ddcaaa923e408bf4d321bae88fd09b22ce07ae]content : 2ebccf55e07779f2d23fa765e8ddcaaa923e408bf4d321bae88fd09b22ce07ae*/
GO语言实现简单梅克尔树根哈希值求解相关推荐
- CEX的梅克尔树储备证明是什么?
由于FTX因挪用用户资金资不抵债被挤兑后暴雷,各大交易所都纷纷表示会推出自己的100%梅克尔树储备证明,以证明自己的资产储备是100%充足的,不会挪用,也不会发生类似事件. 那么,什么是梅克尔树储备证 ...
- Merkle Tree(梅克尔树)算法解析
Merkle Tree概念 Merkle Tree,通常也被称作Hash Tree,顾名思义,就是存储hash值的一棵树.Merkle树的叶子是数据块(例如,文件或者文件的集合)的hash值.非叶 ...
- 区块链100讲:梅克尔树保障区块链数据不可篡改,想换根就要砍树!
2019独角兽企业重金招聘Python工程师标准>>> 区块链100讲上期我们讲了哈希算法和公开密钥算法,说到哈希算法提到了一个名词"Merkle tree",梅 ...
- 区块链入门系列之梅克尔帕特里夏树
区块链入门系列文章 区块链基本概念和名词解释 P2P 共识算法 梅克尔-帕特里夏树 从零开始搭建区块链 这里写自定义目录标题 区块链入门系列文章 前言 Merkle树 MPT 总结 前言 在讲基本概念 ...
- Merkle Patricia Tree 梅克尔帕特里夏树(MPT)规范
Merkle Patricia Tree 梅克尔帕特里夏树(MPT)规范 2017/4/15 posted in Solidity深入浅出系列 Merkle Patricia Tree1,梅克尔帕特 ...
- Merkle Patricia Tree 梅克尔帕特里夏树(MPT)详细介绍
Merkle Patricia Tree [1],梅克尔帕特里夏树,提供了一个基于加密学的,自校验防篡改的数据结构,用来存储键值对关系.后文中将简称为MPT.尽管在本规范范围内,我们限定键值的类型只能 ...
- 快速学习-梅克尔-帕特里夏树
梅克尔-帕特里夏树 Merkel-Patricia Tree(MPT) MPT是什么 Merkel Patricia Tree (MPT),翻译为梅克尔-帕特里夏树 MPT 提供了一个基于密码学验证的 ...
- Merkle Patricia Tree 梅克尔帕特里夏树(MPT)规范(笔记)
Merkle Patricia Tree1,梅克尔帕特里夏树,提供了一个基于加密学的,自校验防篡改的数据结构,用来存储键值对关系.后文中将简称为MPT.尽管在本规范范围内,我们限定键值的类型只能是字符 ...
- IPFS和梅克尔森林
什么是IPFS? IPFS是InterPlanetary File System的缩写.它是一种点对点的可以使Web更快,更安全,更开放的分布式文件系统.我们需要用IPFS把当前版本的Web切换成分布 ...
最新文章
- JAVA培训哪里好?学习Java难不难
- 还在为论文发愁?ACL组委会手把手教你论文投稿小技巧 | ACL 2017
- 想学习linux服务器、做运维、部署项目的同学看这,linux部署
- 关于vector的resize()的理解
- pandas python groupby_pandas之分组groupby()的使用整理与总结
- 财务学python有什么用_学习Python对财务工作者有哪些用途?
- scrollwidth ,clientwidth ,offsetwidth 三者的区别
- 05.Bootstrap导入基础笔记
- 构建器模式_我喜欢构建器模式的三个原因
- ad域用户和计算机搭建,Windows Server 6分钟搭建AD域
- HPU 图书馆占座 python
- java 32位无符号整数_Java中32位无符号数的取法
- html iframe jsp页面跳转页面,js页面跳转和js对iframe进行页面跳转、刷新
- 计算机英语教程第6版,计算机英语教程(第6版)
- 技嘉主板更新版BIOS
- 清华教授:多年以来,我对我的学生都不太满意
- warning: pointer targets in passing argument 3 of ‘accept’ differ in signedness
- (三)ArcGIS API For Javascript之调用动态地图服务
- 机器学习之梯度提升决策树(GBDT)
- python 安卓模拟器 抓包_python + 爬虫 + fiddler + 夜神模拟器 爬取app(1)
热门文章
- springboot+vue整合pdf.js实现预览pdf
- C# 操作FireBird(火鸟)数据库
- IcoFX 3.5.1多语言版本
- 京津城际列车最新时刻表(2009年北京南站候车室照片)
- python版羊了个羊
- 西工大计算机学院读博,西北工业大学考博经验分享
- 安装webpack、使用webpack打包详细案例教程
- php项目的流程图怎么画,工作中的项目流程图怎么画
- HPE: smart storage: hpssacli:
- poj解题报告——2386