第3 章 密码学
九层之台,起于累土 千里之行,始于足下
第3 章 密码学 .................................................................................................... 20
3.1 加密与解密 ............................................................................................... 21
3.1.1 加密与解密简介 ........................................................................... 21
3.1.2 Java 实现 ...................................................................................... 22
3.2 哈希 ........................................................................................................... 46
3.2.1 散列函数简介............................................................................... 46
3.2.2 SHA-256 Java 实战 ...................................................................... 47
3.3 Merkle 树 .................................................................................................. 50
3.3.1 Merkle 树简介 .............................................................................. 50
3.3.2 Merkle 树Java 实战 ..................................................................... 52
3.4 小结 ........................................................................................................... 63
密码在日常生活中屡见不鲜,购物支付用支付密码、在ATM 机取款要用取款密
码、手机屏幕解锁要用解锁密码,等等。
密码学一词源自希腊文kryptos 及logos,在希腊语中意为隐藏及消息。世界上最
早的密码是在公元前405 年,古希腊雅典和斯巴达之间的伯罗奔尼撒战争末期。在
斯巴达军队准备对雅典发动最后一击之际,战前与斯巴达联盟的波斯帝国突然准备
反戈一击。为此斯巴达急需摸清波斯帝国的行动部署。恰巧,斯巴达军队捕获了一
名从波斯帝国回雅典送信的雅典信使。从信使身上搜出一条布满杂乱无章的希腊字
母的腰带,斯巴达军队统帅莱桑德无意中把腰带缠绕在手中的剑鞘上时,竟然发现
腰带上那些杂乱无章的字母组成了一段文字。这便是雅典间谍送回的情报,原来波
斯军队准备在斯巴达军队发起最后攻击时,对斯巴达军队进行突袭。斯巴达军队根
据这份情报马上改变了作战计划,以迅雷不及掩耳之势击溃了毫无戒备的波斯军队,
从而解除了后顾之忧。随后,斯巴达军队回师征伐雅典,最后赢得了战争的胜利。
而在我国古代,藏头诗可谓是密码学的另一种浪漫应用了。
时代车轮滚滚向前,密码学的发展也蒸蒸日上。随着现代信息社会的到来,密
码学的作用也愈发重要。特别是很多信息都必须经过加密之后才能在互联网上传送,
这都离不开现代密码技术。现代密码技术在信息加密、信息认证、数字签名和密钥
管理方面都有很多应用。
区块链技术也离不开密码学,可以说密码学是区块链系统的基石之一。
从本章起,我们将逐步介绍区块链系统的各个核心模块的实现逻辑。
3.1 加密与解密
3.1.1 加密与解密简介
加密与解密技术是对信息进行编码和解码的技术。编码的过程即加密的过程,
加密模块把可读信息(即明文)处理成代码形式(即密文)。解码的过程即解密的过
程,解密模块把代码形式(即密文)转换回可读信息(即明文)。在加密和解密的过
程中,密钥是非常关键的角色。
目前,加密技术主要分为对称加密、不对称加密和不可逆加密三类算法。
对称加密算法是应用较早的加密算法,技术十分成熟。在对称加密算法中,加
密和解密的密钥相同。对称密钥技术有两种基本类型:分组密码和序列密码。
对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。不足
之处是,交易双方使用相同的密钥,安全性得不到保证。目前,广泛使用的对称加
密算法有DES、3DES、IDEA 和AES 等,其中,美国国家标准局倡导的AES 即将作
为新标准取代DES。
不对称加密算法使用两把完全不同但又完全匹配的一对钥匙,称之为公钥和私
钥,公钥和私钥成对配合使用。目前,广泛应用的不对称加密算法有RSA 算法和美
国国家标准局提出的DSA。我们常见的数字签名(Digital Signature)技术就是以不
对称加密算法为基础的。虽然不对称加密算法的安全性得到了提高,但相较于对称
加密算法,加密速度慢、效率低。
不可逆加密算法的使用和上述两类算法略有不同,加密过程中不需要使用密钥,
输入明文后由系统直接经过加密算法处理成密文,加密后的数据是无法被解密的,
只有重新输入明文,并再次经过同样不可逆的加密算法处理,得到相同的加密密文
并被系统重新识别后,才能真正解密。目前,应用较多的不可逆加密算法有RSA 公
司发明的MD5 算法和由美国国家标准局建议的不可逆加密标准SHS(Secure Hash
Standard,安全Hash 标准)等。
3.1.2 Java 实现
我们既可以基于Java 原生实现加密和解密,又可以基于第三方的工具包实现。
下面我们首先介绍基于Java 原生API 的实现方法,接着介绍第三方工具包hutool
和Tink 的加密解密API 使用方法。
1.Cipher 类
Java 中的Cipher 类主要提供加密和解密的功能,该类位于javax.crypto 包下,声
明为 public class Cipher extends Object,它构成了Java Cryptographic Extension (JCE)
框架的核心。
代码详见书中
3.Hutool 简介
在Java 世界中,AES、DES 的加密解密需要使用Cipher 对象构建加密解密系统,
有没有更好的封装工具类来简化开发呢?当然有!Hutool 就是一个好助手。
Hutool 是一个实用的Java 工具包,有pom.jar、javadoc.jar 和sources.jar 等文件,
可对文件、流、加密解密、转码、正则、线程、XML 等JDK 方法进行封装,组成各
种Util 工具类。适用于Web 开发,与其他框架无耦合,高度可替换。
在加密解密这部分,Hutool 针对JDK 支持的所有对称加密算法都做了封装,封
装为SymmetricCrypto 类,AES 和DES 是此类的简化表示。通过实例化这个类,传
入相应的算法枚举即可使用相同方法加密解密字符串或对象。
当前Hutool 支持的对称加密算法枚举有:
AES
ARCFOUR
Blowfish
DES
DESede
RC2
第3 章 密码学 ∣ 33
PBEWithMD5AndDES
PBEWithSHA1AndDESede
PBEWithSHA1AndRC2_40
这些枚举全部在SymmetricAlgorithm 中被列举。
对于不对称加密,最常用的就是RSA 和DSA,在Hutool 中使用AsymmetricCrypto
对象来负责加密解密。
代码详见书中
5.Tink 简介
Tink 是由谷歌的一群密码学家和安全工程师编写的密码库。GitHub 开源地址:
https://github.com/google/tink/。
Tink 的诞生融合了Google 产品团队的丰富工程经验,现已修复了原有实现中的
缺陷,并提供了简单的API,用户可以安全使用,无须具备密码学知识背景。
Tink 提供了易于正确使用且不易被误用的安全API。Tink 通过以用户为中心的
设计、严谨的代码实现和代码审查以及广泛的测试,显著减少了工程开发中常见的
密码陷阱。在谷歌,Tink 已经被用来保护许多产品的数据,如广告、谷歌薪酬、谷
歌助理、Firebase、Android 搜索应用等。
使用Tink 最简单的方法是安装Bazel,然后构建、运行和播放GitHub 中预设的
hello world 示例。
Tink 通过原语执行加密任务,每个原语都是通过指定原语功能的相应接口定义
的。例如,对称密钥加密是通过AEAD 原语(带有关联数据的认证加密)提供的,
它支持两种操作:
1)加密(明文,associated _ data),加密给定明文(使用associated _ data 作为
额外的AEAD 输入),并返回结果密文。
2)解密(密文,associated _ data),它解密给定的密文(使用associated _ data
作为额外的AEAD 输入),并返回结果明文。
目前,Tink 的Java 语言版、Android 语言版、C++语言版和Obj-C 语言版都已通
过了严格的测试,并已投入生产部署。当前Tink 的最新版本是1.2.0,发布于2018
年8 月9 日。此外,Tink 的 Go 语言版本和JavaScript 语言版本正在积极开发中。
6.Tink 的使用
Tink 可以通过Maven 或Gradle 来实现依赖管理。在Maven 中,Tink 的 group ID
是com.google.crypto.tink,artifact ID 是tink。
代码详见书中
《区块链底层设计Java实战》二维码
相关推荐
根据给定文件的信息,我们可以提炼出以下几个主要的知识点:区块链技术、密码学基础以及Go语言在区块链中的应用。 ### 区块链技术 #### 定义 区块链是一种分布式账本技术,通过网络上的多个节点共同维护一个去中心...
区块链密码学视频教程, 区块链入门实战视频教程首选。
论文阅读汇报ppt 密码学应用 区块链
Go语言区块链从入门到深度实战视频课程 区块链 - 以太坊.zip
人工智能-项目实践-区块链-区块链开发实战牛奶溯源项目的代码 子项目 ABCI,应用程序区块链接口 Go-Wire,一个确定性的序列化库 Go-Crypto,一个椭圆曲线密码学库 TmLibs,内部使用的各种 Go 库 IAVL,Merkleized ...
区块链中的密码学技术
基于SM系列密码的联盟区块链底层平台全部资料+详细文档.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请...
【区块链底层技术在平台打造上的应用】 区块链技术作为一种分布式数据库技术,近年来在互联网行业中引发了广泛的关注和探索。本文以智臻链技术平台为例,探讨区块链底层技术如何在平台构建上发挥重要作用。 首先,...
区块链密码视频教程 包括hash散列原理 RSA数字签名 RSA非对称加密 对称机密网络应用 des aes对称加密
区块链中的密码学技术
本文从密码技术和密码算法基础、区块链原理,密码技术在区块链中的具体应用这几个维度对区块链进行了介绍,适合具备一定计算机基础的工科本科生、研究生或者IT从业者学习密码技术和区块链之用,通过对本文的学习,...
3. 非对称加密:第3章至第5章可能涉及非对称加密,如RSA、ECC(椭圆曲线密码学)和 Diffie-Hellman 密钥交换协议,这些内容是公钥基础设施(PKI)的基础。 4. 哈希函数与消息摘要:第6章可能涵盖哈希函数,如MD5、...
广义上讲,区块链技术是利用将打包的数据区块串接成链进行验证与存储数据、利用点对点网络技术和共识算法来生成和更新数据、利用密码学方式保证数据传输的安全、利用自动化脚本代码(也就是智能合约)来操作。...
从零实现部分算法: 课程中实现了base16编解码 ,XOR对称加解密算法,PKCS7 pading数据填充算法,通过对一些简单算法的实现,从而加深对密码学的理解。 理论与实践结合: 课程如果只是讲代码,同学并不能理解接口...
在武汉大学的这门课程中,第三章可能涉及了加密算法、安全性分析以及密码学的基本原理等内容。课后习题是检验学生理解和掌握课程知识的重要环节。根据提供的信息,这里将对可能涉及的几个密码学知识点进行详细阐述:...
摘要:区块链账本技术具有去中心化、难篡改、公开可验证等特点,近年来受到广泛关注。但是,隐私问题可能成为阻碍其进一步发展的瓶颈之一。本文着重介绍现有区块链隐私保护...关键词:隐私保护 区块链 密码学 数字货币
基于区块链密码学的安全信息保存dapp的设计与实现+详细文档+全部资料(高分毕业设计).zip基于区块链密码学的安全信息保存dapp的设计与实现+详细文档+全部资料(高分毕业设计).zip基于区块链密码学的安全信息保存...
区块链原理-附代码.pptx 区块链原理-附代码.pptx 区块链原理-附代码.pptx
通识课