区块链中的加密学

2023-11-03 20:21
文章标签 加密 区块 链中

本文主要是介绍区块链中的加密学,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在区块链中使用了很多加密学算法,包括哈希算法、默克树、数字签名等。在这一节将逐个学习这些知识。

哈希算法

11.png

哈希算法是一种常见的单向加密算法,它将一串数据加密生成一串二进制,但不能由二进制还原为原来的数据。该算法有一下特点:

相同的输入得到相同的二进制串
不同对输入得到不同的二进制串,即有强对抗性,不同的数据不会产生相同的哈希值
输出的二进制长度是一致的


data1 = "Test1"
msg = hashlib.sha256()
msg.update(data1.encode("utf-8"))
output1 = msg.hexdigest()
print(output1)

12.png

```# 再次计算
msg = hashlib.sha256()
msg.update(data1.encode("utf-8"))
output2 = msg.hexdigest()
print(output1 == output2)

True

使用不同的数据

data2 = "Test2"
msg = hashlib.sha256()
msg.update(data2.encode("utf-8"))
output3 = msg.hexdigest()
print(output3)
print(output3  == output1)

32e6e1e134f9cc8f14b05925667c118d19244aebce442d6fecd2ac38cdc97649
False

print(len(output1))
print(len(output3))

64
64

长度都为64,即256长度的比特位![13.png](https://img-c.bubi.cn/f6/d8/de/c7c01d4aa6b5570b2b10bac0312df1b6.png)在区块链中很多地方用了哈希算法,比如对区块计算哈希值。在“区块链基础”部分中实现了一个简化版的区块链。在实际区块链中区块包含元数据的区块头和紧跟其后的构成区块主体的一长串交易,结构如下:![image.png](https://img-c.bubi.cn/48/42/4e/d91be4be32b11e5f60ec2caf68b383c6.png)其中哈希值和nonce等都放在区块头中,其结构如下:![image.png](https://img-c.bubi.cn/65/f2/c9/0b8af1c128a16266ad6f297c1c8c7d46.png)这里涉及到另一个概念——默克(Merkle)树
**默克树**![14.png](https://img-c.bubi.cn/0c/5c/2a/2ae87e5aa5efb0483bc31329ce709a68.png)默克尔树,又叫哈希树,是一种树的数据结构,由一个根节点、一组中间节点和一组叶节点组成。最下面的叶节点包含存储数据或其哈希值,其上的节点是它的子节点内容的哈希值。一个默克树的生成过程如下:1.由数据生成一系列哈希值
![image.png](https://img-c.bubi.cn/b1/24/10/4ce184ed978f416a4ea1ccc5144adc52.png)2.从上述哈希值再生成哈希值
![image.png](https://img-c.bubi.cn/e0/12/b8/abac0fcb9764a6f7c464d8ad60485824.png)3.然后再生成根节点
![image.png](https://img-c.bubi.cn/80/9d/4a/a24082c5c7475cccfa5225fbb9195c7f.png)默克树有如下特点:一般是二叉树,也可以多叉树,具有树结构的所有特点;
- 树的根节点只取决于数据,和其中的更新顺序无关。换个顺序进行更新,甚至重新从头计算树,并不会改变根节点;
- 当两个默克尔树根节点相同时,则意味着所代表的数据必然相同,用根节点校验可以大大减少数据的传输量以及计算的复杂度;
- 默克树的一个分支也是默克树,可以作为独立进行校验;当区块链中的交易数据过多时,可以通过只保留默克树的根节点,删除其下的节点有效的节约存储空间。**数字签名**
在区块链中还有一个重要的技术,那就是数字签名。类似在手写签名来确认直至内容,数字签名用于证实某数字内容的完整性和来源,保证签名的有效性和不可抵赖性。
数字签名使用了公钥密码学。公钥密码学是非对称加密技术,其相对于对称加密技术。在对称加密技术中加密使用相同的密钥加解密数据,为了让对方能够解密,需要同时将密文和密钥发给对方。![image.png](https://img-c.bubi.cn/d1/25/d6/bf16c00c596b59ce7ea2e56e93472749.png)如果有人在传输过程中截取了密文和密钥,就一样能解密出明文,这就导致了安全性问题。![image.png](https://img-c.bubi.cn/f9/b6/09/f78945a6165afcf01b9cd211fbaaef5e.png)在非对称加密中有公钥和私钥两个,公钥用来加密,私钥用来解密,公钥可以发给任意的人。![image.png](https://img-c.bubi.cn/a3/d6/da/6ec24b95af18730cad7a65e2edfcb42c.png)在这个过程中只有私钥才可以解密,而加密用的是公钥,故不需要传输私钥,只要保证私钥放在安全的地方,被盗取后其他人还是无法破解密文。![image.png](https://img-c.bubi.cn/f1/20/9f/208503f30fd56d656ccf51e11424febd.png)而数字签名就是基于上述非对称加密技术,不同点在于数字签名使用私钥生成一个签名,接收方使用公钥进行校验。比如上面用私钥解密得到明文后,用私钥进行签名进行回复,收到回复后用公钥解密得到的内容与数据相同即可证明签名正确。
![image.png](https://img-c.bubi.cn/73/9f/37/45088bc6cc950d7c35dc462f701a7d12.png)因为公钥和私钥是成对的,唯一对应的,私钥只有对方拥有,所以对方也不能对签名进行抵赖。在区块链技术中常见的签名算法是椭圆签名算法。其算法用对椭圆曲线上的点进行加法或乘法运算来表达。区块链中私钥是一个随机数,通过椭圆曲线签名算法生成公钥。但反向从公钥计算出私钥几乎是不可能的。椭圆曲线签名算法还具有安全性高和存储空间占用小的特点。

这篇关于区块链中的加密学的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/340657

相关文章

Java中的密码加密方式

《Java中的密码加密方式》文章介绍了Java中使用MD5算法对密码进行加密的方法,以及如何通过加盐和多重加密来提高密码的安全性,MD5是一种不可逆的哈希算法,适合用于存储密码,因为其输出的摘要长度固... 目录Java的密码加密方式密码加密一般的应用方式是总结Java的密码加密方式密码加密【这里采用的

使用Python制作一个PDF批量加密工具

《使用Python制作一个PDF批量加密工具》PDF批量加密‌是一种保护PDF文件安全性的方法,通过为多个PDF文件设置相同的密码,防止未经授权的用户访问这些文件,下面我们来看看如何使用Python制... 目录1.简介2.运行效果3.相关源码1.简介一个python写的PDF批量加密工具。PDF批量加密

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

3.比 HTTP 更安全的 HTTPS(工作原理理解、非对称加密理解、证书理解)

所谓的协议 协议只是一种规则,你不按规则来就无法和目标方进行你的工作 协议说白了只是人定的规则,任何人都可以定协议 我们不需要太了解细节,这些制定和完善协议的人去做的,我们只需要知道协议的一个大概 HTTPS 协议 1、概述 HTTPS(Hypertext Transfer Protocol Secure)是一种安全的超文本传输协议,主要用于在客户端和服务器之间安全地传输数据

ja-netfilter的前世今生和非对称加密的欺骗原理

文章目录 ja-netfilter起源官网插件插件配置文件插件的综合应用更多用法 非对称加密欺骗原理非对称加密和数字证书激活过程和欺骗手段分析代码示例第一步:生成自签名证书脚本第二步:使用自签名证书对产品激活信息进行签名 样例数据样例激活码(注:用于代码演示,直接粘贴到JetBrains 家 IDE 中无法完成激活!不用试,肯定提示无效,无法激活!!)样例power.conf(配合ja-ne

Linux加密框架设计与实现

本文转自网络文章,内容均为非盈利,版权归原作者所有。 转载此文章仅为个人收藏,分享知识,如有侵权,马上删除。 原文作者:原文作者是独孤九贱大佬 原文地址:http://bbs.chinaunix.net/thread-3627341-1-1.html

Android的登陆MD5加密

1:导入代码 public class MD5Util {private static final String TAG = "MD5Util";/**** MD5加码 生成32位md5码*/public static String string2MD5(String inStr) {Log.e(TAG, "string2MD5: -------------------------");Mess

超级 密码加密 解密 源码,支持表情,符号,数字,字母,加密

超级 密码加密 解密 源码,支持表情,符号,数字,字母,加密 可以将表情,动物,水果,表情,手势,猫语,兽语,狗语,爱语,符号,数字,字母,加密和解密 可以将文字、字母、数字、代码、标点符号等内容转换成新的文字形式,通过简单的文字以不同的排列顺序来表达不同的内容 源码截图: https://www.httple.net/152649.html

数据库遇上知识图谱、区块链、深度学习

参考资料: https://zhuanlan.zhihu.com/p/33381916 https://www.zuozuovera.com/archives/1062/ 东南大学D&Intel Lab相关ppt 数据库的核心概念——表示、存取、查询 有了数据库是干什么,大概实现的逻辑,特点,才能引申出对当今这些新技术的对比、适应和发展。 目的:研究数据表示、存取数据模型:表示数据的模型,通