具体描述
《Java加密与解密的艺术(第2版)》是Java安全领域公认的标杆之作,被奉为每一位Java开发工程师必读的著作之一。由资深专家撰写,第1版4年来畅销不衰,繁体版在台湾出版,大陆和台湾的读者都给予了极高的评价。第2版根据Java 7全面更新,不仅新增了很多重要的内容,而且对第1版中存在的瑕疵和不足进行了完善,使得本书内容更为详尽、更加与时俱进,能更好地满足广大Java企业级应用开发工程师和系统架构师的需求。
《Java加密与解密的艺术(第2版)》共12章,分为3个部分:基础篇(第1~4章)对Java企业级应用的安全知识、密码学核心知识、与Java加密相关的API和通过权限文件加强系统安全方面的知识进行了全面的介绍;实践篇(第5~9章)不仅对电子邮件传输算法、消息摘要算法、对称加密算法、非对称加密算法、数字签名算法等现今流行的加密算法的原理进行了全面而深入的剖析,还结合翔实的范例说明了各种算法的具体应用场景;综合应用篇(第10~12章)既细致地讲解了加密技术对数字证书和SSL/TLS协议的应用,又以示例的方式讲解了加密与解密技术在网络中的实际应用,极具实践指导性。
Java开发者将通过本书掌握密码学和Java加密/解密技术的所有细节;系统架构师将通过本书领悟构建安全企业级应用的要义;其他领域的安全工作者也能通过本书一窥加密与解密技术的精髓。
作者简介
梁栋 资深Java EE技术专家和Java EE企业级应用架构师。安全技术专家,对Java加密与解密技术有系统深入的研究。开源技术爱好者,有着丰富的Spring、Apache系列等开源框架的实践经验。国内Bouncy Castle扩展加密技术引入者,对其算法实现与应用有深入研究,并将其整理成册,供广大技术人员参考学习。擅长分布式、高并发系统的设计与架构,在分布式缓存、NoSQL、消息队列等方面有非常丰富的实践经验。
目录信息
第一部分 基础篇
第1章 企业应用安全 2
1.1 我们身边的安全问题 2
1.2 拿什么来拯救你,我的应用 3
1.2.1 安全技术目标 3
1.2.2 OSI安全体系结构 4
1.2.3 TCP/IP安全体系结构 6
1.3 捍卫企业应用安全的银弹 8
1.3.1 密码学在安全领域中的身影 8
1.3.2 密码学与Java EE 8
1.4 为你的企业应用上把锁 9
1.5 小结 10
第2章 企业应用安全的银弹—密码学 11
2.1 密码学的发家史 11
2.1.1 手工加密阶段 11
2.1.2 机械加密阶段 12
2.1.3 计算机加密阶段 13
2.2 密码学定义、术语及其分类 15
2.2.1 密码学常用术语 15
2.2.2 密码学分类 16
2.3 保密通信模型 17
2.4 古典密码 18
2.5 对称密码体制 19
2.5.1 流密码 20
2.5.2 分组密码 21
2.6 非对称密码体制 27
2.7 散列函数 28
2.8 数字签名 29
2.9 公钥基础设施 31
2.9.1 PKI的标准 31
2.9.2 PKI系统的组成 32
2.9.3 数字证书 33
2.10 PGP、OpenPGP与GPG 34
2.11 密码学的未来 34
2.11.1 密码算法的破解 35
2.11.2 密码学的明天 36
2.12 小结 36
第3章 Java加密利器 38
3.1 Java与密码学 38
3.1.1 Java安全领域组成部分 38
3.1.2 安全提供者体系结构 39
3.1.3 关于出口的限制 40
3.1.4 关于本章内容 40
3.2 java.security包详解 40
3.2.1 Provider类 41
3.2.2 Security类 44
3.2.3 MessageDigest类 46
3.2.4 DigestInputStream类 49
3.2.5 DigestOutputStream类 49
3.2.6 Key接口 52
3.2.7 AlgorithmParameters类 53
3.2.8 AlgorithmParameterGenerator类 55
3.2.9 KeyPair类 56
3.2.10 KeyPairGenerator类 57
3.2.11 KeyFactory类 59
3.2.12 SecureRandom类 61
3.2.13 Signature类 62
3.2.14 SignedObject类 65
3.2.15 Timestamp类 66
3.2.16 CodeSigner类 67
3.2.17 KeyStore类 69
3.3 javax.crypto包详解 73
3.3.1 Mac类 73
3.3.2 KeyGenerator类 75
3.3.3 KeyAgreement类 77
3.3.4 SecretKeyFactory类 78
3.3.5 Cipher类 80
3.3.6 CipherInputStream类 84
3.3.7 CipherOutputStream类 83
3.3.8 SealedObject类 86
3.4 java.security.spec包和javax.crypto.spec包详解 88
3.4.1 KeySpec和Algorithm-ParameterSpec接口 88
3.4.2 EncodedKeySpec类 89
3.4.3 SecretKeySpec类 92
3.4.4 DESKeySpec类 93
3.5 java.security.cert包详解 94
3.5.1 Certificate类 94
3.5.2 CertificateFactory类 95
3.5.3 X509Certificate类 97
3.5.4 CRL类 98
3.5.5 X509CRLEntry类 99
3.5.6 X509CRL类 100
3.5.7 CertPath类 102
3.6 javax.net.ssl包详解 103
3.6.1 KeyManagerFactory类 103
3.6.2 TrustManagerFactory类 105
3.6.3 SSLContext类 106
3.6.4 HttpsURLConnection类 109
3.6.5 SSLSession接口 111
3.6.6 SSLSocketFactory类 111
3.6.7 SSLSocket类 112
3.6.8 SSLServerSocketFactory类 114
3.6.9 SSLServerSocket类 114
3.7 小结 117
第4章 他山之石,可以攻玉 119
4.1 加固你的系统 119
4.1.1 获得权限文件 120
4.1.2 配置权限文件 120
4.1.3 验证配置 121
4.2 加密组件Bouncy Castle 121
4.2.1 获得加密组件 122
4.2.2 扩充算法支持 122
4.2.3 相关API 126
4.3 辅助工具Commons Codec 130
4.3.1 获得辅助工具 130
4.3.2 相关API 131
4.4 小结 141
第二部分 实践篇
第5章 电子邮件传输算法—Base64 144
5.1 Base64算法的由来 144
5.2 Base64算法的定义 144
5.3 Base64算法与加密算法的关系 145
5.4 实现原理 146
5.4.1 ASCII码字符编码 146
5.4.2 非ASCII码字符编码 147
5.5 模型分析 147
5.6 Base64算法实现 148
5.6.1 Bouncy Castle 148
5.6.2 Commons Codec 150
5.6.3 两种实现方式的差异 154
5.6.4 不得不说的问题 154
5.7 Url Base64算法实现 157
5.7.1 Bouncy Castle 157
5.7.2 Commons Codec 159
5.7.3 两种实现方式的差异 160
5.8 应用举例 161
5.8.1 电子邮件传输 161
5.8.2 网络数据传输 161
5.8.3 密钥存储 162
5.8.4 数字证书存储 162
5.8.5 OpenSSL操作Base 64编码 163
5.9 小结 163
第6章 验证数据完整性—消息摘要算法 165
6.1 消息摘要算法简述 165
6.1.1 消息摘要算法的由来 165
6.1.2 消息摘要算法的家谱 166
6.2 MD算法家族 167
6.2.1 简述 167
6.2.2 模型分析 168
6.2.3 实现 170
6.3 SHA算法家族 177
6.3.1 简述 177
6.3.2 模型分析 178
6.3.3 实现 179
6.4 MAC算法家族 191
6.4.1 简述 191
6.4.2 模型分析 192
6.4.3 实现 192
6.5 其他消息摘要算法 205
6.5.1 简述 205
6.5.2 实现 205
6.6 循环冗余校验算法—CRC算法 216
6.6.1 简述 216
6.6.2 模型分析 217
6.6.3 实现 217
6.7 实例:文件校验 219
6.8 小结 222
第7章 初等数据加密—对称加密算法 224
7.1 对称加密算法简述 224
7.1.1 对称加密算法的由来 224
7.1.2 对称加密算法的家谱 225
7.2 数据加密标准—DES 225
7.2.1 简述 225
7.2.2 模型分析 226
7.2.3 实现 227
7.3 三重DES—DESede 233
7.3.1 简述 233
7.3.2 实现 233
7.4 高级数据加密标准—AES 238
7.4.1 简述 238
7.4.2 实现 239
7.5 国际数据加密标准—IDEA 243
7.5.1 简述 243
7.5.2 实现 243
7.6 基于口令加密—PBE 247
7.6.1 简述 247
7.6.2 模型分析 247
7.6.3 实现 248
7.7 实例:对称加密网络应用 253
7.8 小结 265
第8章 高等数据加密—非对称加密算法 267
8.1 非对称加密算法简述 267
8.1.1 非对称加密算法的由来 267
8.1.2 非对称加密算法的家谱 268
8.2 密钥交换算法—DH&ECDH 269
8.2.1 简述 269
8.2.2 模型分析 269
8.2.3 DH实现 270
8.2.4 ECDH实现 280
8.3 典型非对称加密算法—RSA 289
8.3.1 简述 289
8.3.2 模型分析 290
8.3.3 实现 291
8.4 常用非对称加密算法—ElGamal 298
8.4.1 简述 298
8.4.2 模型分析 298
8.4.3 实现 299
8.5 实例:非对称加密网络应用 305
8.6 小结 317
第9章 带密钥的消息摘要算法—数字签名算法 319
9.1 数字签名算法简述 319
9.1.1 数字签名算法的由来 319
9.1.2 数字签名算法的家谱 320
9.2 模型分析 320
9.3 经典数字签名算法—RSA 321
9.3.1 简述 322
9.3.2 实现 322
9.4 数字签名标准算法—DSA 328
9.4.1 简述 328
9.4.2 实现 328
9.5 椭圆曲线数字签名算法—ECDSA 333
9.5.1 简述 333
9.5.2 实现 333
9.6 实例:带有数字签名的加密网络应用 341
9.7 小结 352
第三部分 综合应用篇
第10章 终极武器—数字证书 356
10.1 数字证书详解 356
10.2 模型分析 359
10.2.1 证书签发 359
10.2.2 加密交互 360
10.3 证书管理 361
10.3.1 KeyTool证书管理 361
10.3.2 OpenSSL证书管理 368
10.4 证书文件操作 379
10.4.1 JKS文件操作 379
10.4.2 PFX文件操作 388
10.4.3 PEM文件操作 390
10.5 应用举例 394
10.6 小结 394
第11章 终极装备—安全协议 396
11.1 安全协议简述 396
11.1.1 HTTPS协议 396
11.1.2 SSL/TLS协议 397
11.2 模型分析 398
11.2.1 协商算法 399
11.2.2 验证证书 399
11.2.3 产生密钥 400
11.2.4 加密交互 402
11.3 单向认证服务 403
11.3.1 准备工作 403
11.3.2 服务验证 408
11.3.3 代码验证 410
11.4 双向认证服务 415
11.4.1 准备工作 415
11.4.2 服务验证 418
11.4.3 代码验证 420
11.5 应用举例 421
11.6 实例 422
11.6.1 SSLSocket获取数字证书 422
11.6.2 SSLSocket加密交互 425
11.7 小结 429
第12章 量体裁衣—为应用选择合适的装备 431
12.1 实例:常规Web应用开发安全 431
12.1.1 常规Web应用基本实现 431
12.1.2 安全升级1—摘要处理 436
12.1.3 安全升级2—加盐处理 438
12.2 实例:IM应用开发安全 441
12.2.1 IM应用开发基本实现 441
12.2.2 安全升级1—隐藏数据 454
12.2.3 安全升级2—加密数据 457
12.3 实例:Web Service应用开发安全 462
12.3.1 Web Service应用基本实现 462
12.3.2 安全升级1—单向认证服务 469
12.3.3 安全升级2—双向认证服务 480
12.4 小结 485
附录A Java 7支持的算法 487
附录B Bouncy Castle支持的算法 490
· · · · · · (收起)
读后感
非常好的一本书,内容充实,可读性强,实践指导性非常好,从头到尾非常有序,让读者由不知到熟悉再到应用都有有一很清晰的思路。特别是java加密利器与综合应用篇对安全性特别高的项目,但又不知道从何下手的读者特别有帮助。
这是一本非常实用的书,从密码学理论、Java API实现,包括Bouncy Castle和Commons Codec的API实现、单向双向认证等多方面阐述如何使用Java这门语言加强系统安全。其实,在Java安全这个行业里,未必有多少人系统地学习过这些理论知识,基本上都是单纯去实现一些安全技术根本都不...
内容太过简单, 所讲的内容没有超出oralce java security tutorial的范围, 有兴趣的朋友可以看官方的文档进一步的了解整个java security 的概貌。http://docs.oracle.com/javase/6/docs/technotes/guides/security/。 优点是在介绍加解密算法的时候,给出了详尽的示例。缺点也...
除了第一章写的有点意思外,其它章节太枯燥了,很多地方几乎是Java API的中文翻译。如果官方文档里能找到,有必要花那么长的篇章写吗? 作者写的代码,几乎原封不动贴到书里,连注释都被复制到所有的地方,比如@author梁栋,@version 1.0,@since 1.0, 出现在N多地方,凑字数也...
除了第一章写的有点意思外,其它章节太枯燥了,很多地方几乎是Java API的中文翻译。如果官方文档里能找到,有必要花那么长的篇章写吗? 作者写的代码,几乎原封不动贴到书里,连注释都被复制到所有的地方,比如@author梁栋,@version 1.0,@since 1.0, 出现在N多地方,凑字数也...
用户评价
这本书的排版和结构设计也值得称赞,逻辑层次非常清晰。它并没有将所有内容堆砌在一起,而是巧妙地将理论基础、核心API应用、高级主题(如安全通信协议集成)分块讲解。例如,在讲解对称加密后,紧接着就无缝过渡到了如何使用这些加密结果来构建一个安全的通道,而不是把通信部分完全割裂开来。我尤其喜欢作者在每章末尾设置的“安全思考”环节,这些小结往往会抛出一个引人深思的安全场景,促使读者停下来反思自己项目中的潜在风险点。对于涉及到JNI和本地代码接口安全性的讨论,这本书也给出了Java层面的应对策略,这对于我们集成第三方安全库时,如何保持端到端的安全状态至关重要。总而言之,这是一本集深度、广度、实用性于一身的佳作,对于任何严肃对待Java安全开发的工程师来说,都绝对称得上是案头必备的参考资料。
这本《Java加密与解密的艺术(第2版)》简直是为我这种深度依赖Java进行安全开发的人量身定做的。我本来以为加密和解密无非就是调用几个API,但这本书彻底颠覆了我的看法。它不仅仅停留在表面的代码实现上,而是深入到了算法原理的底层逻辑。比如,它对AES、RSA这些主流算法的数学基础讲解得非常透彻,让我明白为什么选择特定的填充模式或者密钥长度会直接影响到安全性。我记得有一次在处理一个遗留系统的安全升级时,光是理解BC(Bouncy Castle)库中不同Provider之间的细微差异就让我头疼不已,这本书里的实战案例恰好覆盖了这些细节,简直是救了我一命。特别是关于数字签名和证书管理的章节,写得极其详尽,几乎可以作为我团队内部的安全规范参考手册。它不是那种只讲“怎么做”的书,更侧重于“为什么这么做”,这种深度让我对构建健壮的安全体系有了全新的认识。我尤其欣赏作者在描述一些复杂协议时,总能用非常清晰的流程图和伪代码来辅助说明,即便遇到像SSL/TLS握手那样错综复杂的流程,也能被拆解得井井有条,阅读体验非常流畅。
坦率地说,市面上关于加密的书籍往往过于学术化,或者反过来,又流于表面地介绍几个简单的工具类。但《Java加密与解密的艺术(第2版)》找到了一个绝佳的平衡点。它的语言风格极其接地气,不像是在读论文,更像是在听一位经验丰富的大师在传授绝活。我最欣赏它对“不安全的代码模式”的批判性分析。比如,书中详细解析了为什么在特定情况下,使用ECB模式是灾难性的,并通过具体的例子演示了密文的模式暴露。这种“反面教材”的教学方式,比单纯讲述正确做法来得更深刻。此外,对于Java 8及以上版本的特性更新,比如新的KeyStore管理方式,也有非常及时的跟进和介绍,这确保了书中的内容不会因为技术迭代而迅速过时。读完后,我感觉自己不再是单纯的“调用者”,而是真正理解了加密背后的安全哲学。
作为一名刚从C/C++转向Java生态圈的开发者,我对Java的安全性模块一直心存疑虑,总觉得语言层面的抽象会掩盖掉很多底层风险。然而,这本书的出现彻底打消了我的顾虑。它对Java安全API(JCA/JCE)的讲解细致入微,我以前只是模糊地知道`Cipher`类,现在才知道如何正确地初始化、管理密钥的生命周期,以及如何高效地处理密文流。书中对流密码和分组密码的模式对比分析,简直是教科书级别的范例。我过去在处理大数据加密时,总是因为流式处理效率低下而头疼,这本书里提供的异步加密模型和内存优化技巧,直接让我把原来运行需要数小时的任务缩短到了几分钟。更让我惊喜的是,它还探讨了针对侧信道攻击(Side-Channel Attacks)的一些防御性编程实践,这在很多同类书籍中是绝无仅有的深度。这不再是一本简单的编程指南,更像是一份经过实战检验的安全工程宝典,让我这个“外来者”也能迅速融入Java安全开发的专业领域。
我以前总觉得,加解密这种东西,只要能跑起来就万事大吉了,但这本书让我明白了“能跑”和“安全”之间那道巨大的鸿沟。特别是针对哈希函数和消息认证码(MAC)的部分,作者强调了“加盐”和“迭代次数”在密码存储中的极端重要性。书中对PBKDF2和bcrypt的对比分析,清晰地展示了现代密码存储的最佳实践,这对于我们处理用户密码数据至关重要。我记得我们团队之前有一个小疏忽,就是对随机数生成器的选择不够严谨,导致密钥的熵值不足。这本书里明确指出了`java.security.SecureRandom`和普通`Random`的区别以及使用场景,让我立刻回去修正了那部分的漏洞。而且,本书对证书操作的描述非常实用,不像其他书那样晦涩难懂,它直接切入了PKCS#7和X.509证书的实际应用场景,比如如何自签名、如何验证链的有效性,这些都是我们在实际项目中每天都会遇到的问题。
本书是从技术应用层面出发的,对于各个算法的底层理论涉及较少
书很厚,没实质用途
就像有个豆友评论的那样,这本书——对加密算法本身介绍太简单,大量的篇幅是代码例子展示JDK和第三方加密组件API使用。对于加密解密完全不懂得的童鞋会有点帮助吧,有经验的人就不要买了。
书很厚,没实质用途
对java的加解密方面介绍的很系统,代码详尽,非常适合加解密的入门。