本书是Java安全领域公认的标杆之作,被奉为每一位Java开发工程师必读的著作之一。由资深专家撰写,第1版4年来畅销不衰,繁体版在台湾出版,大陆和台湾的读者都给予了极高的评价。第二版根据Java SE 7全面更新,不仅新增了很多重要的内容,而且对第一版中存在的瑕疵和不足进行了完善,使得本书内容更为详尽、更加与时具进,能更好地满足广大Java企业级应用开发工程师和系统架构师的需求。
全书共11章,分为三个部分:基础篇(1-4章)对Java企业级应用的安全知识、密码学核心知识、与Java加密相关的API和通过权限文件加强系统安全方面的知识进行了全面的介绍;实践篇(5-9章)不仅对电子邮件传输算法、消息摘要算法、对称加密算法、非对称加密算法、数字签名算法等现今流行的加密算法的原理进行了全面而深入的剖析,而且还结合翔实的范例说明了各种算法的具体应用场景;综合应用篇(9-11)既细致地讲解了加密技术对数字证书和SSL/TLS协议的应用,又以示例的方式讲解了加密与解密技术在网络中的实际应用,极具实践指导性。
Java开发者将通过本书掌握密码学和Java加密与解密技术的所有细节;系统架构师将通过本书领悟构建安全企业级应用的要义;其他领域的安全工作者也能通过本书一窥加密与解密技术的精髓。
封面图
目录
- 前言
- 第一部分 基础篇
- 第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 EE8
- 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与GPG34
- 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 AlgorithmParameter-
- Generator类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 Castle121
- 4.2.1 获得加密组件122
- 4.2.2 扩充算法支持122
- 4.2.3 相关API126
- 4.3 辅助工具Commons Codec130
- 4.3.1 获得辅助工具130
- 4.3.2 相关API131
- 4.4 小结141
- 第二部分 实践篇
- 第5章 电子邮件传输算法—Base64144
- 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 Castle148
- 5.6.2 Commons Codec150
- 5.6.3 两种实现方式的差异154
- 5.6.4 不得不说的问题154
- 5.7 Url Base64算法实现157
- 5.7.1 Bouncy Castle157
- 5.7.2 Commons Codec159
- 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 数据加密标准—DES225
- 7.2.1 简述225
- 7.2.2 模型分析226
- 7.2.3 实现227
- 7.3 三重DES—DESede233
- 7.3.1 简述233
- 7.3.2 实现233
- 7.4 高级数据加密标准—AES238
- 7.4.1 简述238
- 7.4.2 实现239
- 7.5 国际数据加密标准—IDEA243
- 7.5.1 简述243
- 7.5.2 实现243
- 7.6 基于口令加密—PBE247
- 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&ECDH269
- 8.2.1 简述269
- 8.2.2 模型分析269
- 8.2.3 DH实现270
- 8.2.4 ECDH实现280
- 8.3 典型非对称加密算法—RSA289
- 8.3.1 简述289
- 8.3.2 模型分析290
- 8.3.3 实现291
- 8.4 常用非对称加密算法—ElGamal298
- 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 经典数字签名算法—RSA321
- 9.3.1 简述322
- 9.3.2 实现322
- 9.4 数字签名标准算法—DSA328
- 9.4.1 简述328
- 9.4.2 实现328
- 9.5 椭圆曲线数字签名算法—ECDSA333
- 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