Java安全性编程实例
目 录
第1章运行环境设置 1
1.1 J2SE的安装和设置 1
1.1.1下载J2SE 1
1.1.2安装J2SE 1
1.1.3设置J2SE 3
2.1.4 J2SE的主要工具 4
1.2反编译器的安装 5
1.3 混淆器的安装 7
第2章数据内容的保护—— 加密和解密 8
2.1一个简单的加密和解密程序——凯撒密码 8
2.2对称密钥的生成和保存 10
2.2.1对称密钥的生成及以对象序列化方式保存 11
2.2.2以字节保存对称密钥 12
2.3使用对称密钥进行加密和解密 14
2.3.1使用对称密钥进行加密 14
2.3.2使用对称密钥进行解密 17
2.4基于口令的加密和解密 19
2.4.1基于口令的加密 19
2.4.2基于口令的解密 22
2.5针对流的加密和解密 25
2.5.1针对输入流的解密和解密 25
2.5.2针对输出流的解密和解密 27
2.6加密方式的设定 30
2.6.1使用CBC方式的加密 30
2.6.2使用CBC方式的解密 33
2.7 生成非对称加密的公钥和私钥 35
2.8 使用RSA算法进行加密和解密 37
2.8.1使用RSA公钥进行加密 37
2.8.2使用RSA私钥进行解密 40
2.9 使用密钥协定创建共享密钥 42
2.9.1创建DH公钥和私钥 43
2.9.2创建共享密钥 46
第3章Java源代码和类、变量 及方法的保护 50
3.1 Java反编译及混淆器的使用 50
3.2从网络资源加载节码文件 55
3.3以任意方式加载字节码文件 60
3.4 加载加密的字节码文件 62
3.5 加载当前目录下的加密字节码文件 65
3.6 Java类、成员变量和方法的保护 69
3.6.1类的保护 69
3.6.2成员变量和方法的保护 73
3.6.3使用校验器 75
3.6.4 Reference类型私有成员变量的保护 77
3.6.5 保护常量 80
第4章 数据完整性和所有者的确认——消息摘要和签名 83
4.1使用消息摘要验证数据未被篡改 83
4.1.1计算消息摘要 84
4.1.2基于输入流的消息摘要 85
4.1.3输入流中指定内容的消息摘要 87
4.1.4基于输入流的消息摘要 89
4.2使用消息验证码 91
4.3使用数字签名确定数据的来源 93
4.3.1使用私钥进行数字签名 94
4.3.2使用公钥验证数字签名 96
4.4 使用消息摘要保存口令 98
4.4.1 使用消息摘要保存口令 99
4.4.2 使用消息摘要验证口令 100
4.4.3 攻击消息摘要保存的口令 102
4.4.4 使用加盐技术防范字典式攻击 105
4.4.5 验证加盐的口令 108
第5章 数字化身份的确定 ——数字证书 112
5.1数字证书的创建 112
5.1.1 使用默认的密钥库和算法创建数字证书 112
5.1.2 使用别名 114
5.1.3 使用指定的算法和密钥库和有效期 115
5.1.4 使用非交互模式 116
5.2数字证书的显示 117
5.2.1 使用Keytool直接从密钥库显示条目信息 117
5.2.2 使用Keytool直接从密钥库显示证书详细信息 118
5.2.3 使用Keytool将数字证书导出到文件 119
5.2.4 使用Keytool从文件中显示证书 120
5.2.5 在Windows中从文件显示证书 121
5.2.6 Java程序从证书文件读取证书 122
5.2.7 Java程序从密钥库直接读取证书 124
5.2.8 Java程序显示证书指定信息(全名/公钥/签名等) 126
5.3密钥库的维护 129
5.3.1使用Keytool删除指定条目 129
5.3.2使用Keytool修改指定条目的口令 130
5.3.3 Java程序列出密钥库所有条目 131
5.3.4 Java程序修改密钥库口令 132
5.3.5 Java程序修改密钥库条目的口令及添加条目 134
5.3.6 Java程序检验别名及删除条目 136
5.4数字证书的签发 137
5.4.1 确定CA的权威性——安装CA的证书 137
5.4.2 验证CA的权威性——显示CA的证书 141
5.4.3 Java程序签发数字证书 142
5.4.4 数字证书签名后的发布 148
5.5数字证书的检验 150
5.5.1 Java程序验证数字证书的有效期 150
5.5.2 使用Windows查看证书路径验证证书的签名 152
5.5.3 Windows中卸载证书 153
5.5.4 Java程序使用CA公钥验证已签名的证书 157
第6章 数字化身份 ——CertPath证书链 160
6.1密钥库中创建并保存证书链的几种方法 160
6.1.1 使用Keytool将已签名的数字证书导入密钥库 160
6.1.2 使用Java程序将已签名的数字证书导入密钥库 164
6.2 几种获取CertPath证书链的方法 166
6.2.1 根据证书文件生成CertPath类型的对象 167
6.2.2 从密钥库读取证书链生成CertPath类型的对象 169
6.2.3 从HTTPS服务器获取证书链 171
6.3 CertPath对象的证书显示和保存 178
6.3.1 显示CertPath中的证书 178
6.3.2 保存CertPath中的证书 180
6.4 验证CertPath证书链 182
6.4.1 验证主体和签发者 183
6.4.2 验证签名 185
6.4.3 CertPathValidator类基于TrustAnchor验证证书链 187
6.4.4 CertPathValidator类基于密钥库验证证书链 191
6.5 使用CertStore对象保存和提取证书 195
6.5.1创建CertStore对象 195
6.5.2定义证书的选择标准 199
6.5.3从CertStore中提取证书 202
6.6 证书的吊销 204
6.6.1查看证书吊销清单常规信息 204
6.6.2查看清单中被吊销的证书 210
6.6.3从CertStore对象中提取已吊销的证书 212
第7章 数据的安全传输和身份验证 ——SSL和HTTPS编程 217
7.1 最简单的SSL通信 217
7.1.1 最简单的SSL服务器 217
7.1.2 最简单的SSL客户程序 219
7.1.3 进一步设置信任关系 222
7.1.4 设置默认信任密钥库 223
7.1.5 通过KeyStore对象选择密钥库 226
7.2 进一步的SSL客户和服务器程序的例子 228
7.2.1 设计通信规则 228
7.2.2 查看对方的证书等连接信息 233
7.3 HTTPS客户及服务器程序 237
7.3.1 最简单的HTTPS服务器程序 237
7.3.2 最简单的HTTPS客户程序 244
7.3.3 基于Socket的HTTPS客户程序 247
7.3.4 传输实际文件 249
7.4基于证书的客户身份验证 253
7.4.1 最简单的验证客户身份的HTTPS服务器程序 253
7.4.2 编写客户程序连结需客户验证的HTTPS服务器 256
第8章 程序运行的安全性 ——基于代码来源的授权 258
8.1 安全管理器的使用 258
8.1.1使用默认的安全管理器限制应用程序 258
8.1.2编写自己的安全管理器 261
8.1.3在程序中设置安全管理器 264
8.2使用策略文件基于代码位置进行授权 265
8.2.1允许所有代码具有所有权限 265
8.2.2允许所有代码具有特定的权限 270
8.2.3许所有代码具有多种不同权限 272
8.2.4针对指定目录中的代码的授权 274
8.2.5针对从网络下载的代码的授权 279
8.3使用策略文件基于代码的所有者进行授权 283
8.3.1编程者对代码进行签名 283
8.3.2用户检验已签名的代码 284
8.3.3针对签名者进行授权 286
8.4定义特权代码 289
8.4.1 不同代码之间的调用和授权 289
8.4.2 使用doPrivileged( )方法定义特权代码 294
8.4.3 使用匿名类定义特权代码 298
8.5权限的操作及定义自己的权限 302
8.5.1 策略文件权限的检测 303
8.5.2 最简单的权限定义 306
8.5.3 使用签名的权限 310
8.6 Applet的安全运行 312
8.6.1 使用AppletViewer运行的Java Applet 312
8.6.2 浏览器中使用Java Plug-in运行Java Applet 315
8.6.3 浏览器基于策略文件运行Java Applet 321
8.6.4 浏览器运行RSA签名的Java Applet 323
8.6.5 Java Plug-in的证书管理 328
8.6.6 使用usePolicy权限加强RSA签名Applet的安全控制 330
第9章 程序运行的安全性—— 基于用户身份的验证和授权(JAAS) 333
9.1 最简单的身份验证 333
9.1.1最简单的登录 333
9.1.2更换登录模块修改验证方式 337
9.1.3更换回调处理器修改登录界面 339
9.1.4使用非交互式验证 340
9.2编写自己的登录模块 343
9.2.1简单的登录模块 343
9.2.2完整的登录模块模板 351
9.2.3使用模板编写自己的密钥库登录模块 359
9.3使用堆叠式登录 367
9.3.1堆叠式登录及各个登录模块的相互关系 367
9.3.2堆叠登录模块之间的信息共享 371
9.4编写自己的回调处理器 387
9.4.1最简单的回调处理器 387
9.4.2 图形界面口令输入的安全性 393
9.4.3文本界面口令输入的安全性 395
9.4.4 更加安全的文本界面口令输入方式 397
9.5基于身份的授权 400
9.5.1使用策略文件的基于身份授权 400
9.5.2使用编程方式的基于身份授权 406
9.5.3 比较doAsPrivileged( )和doAs( ) 410
本书共分9章,主要内容如下:
第一章
解决的主要问题
运行本书的程序需要哪些软件?
主要内容
介绍本书所使用的主要软件及其安装和配置
第二章
解决的主要问题——内容的安全性
数据在网上传递怎么样防止被黑客窃取听到?
硬盘上的文件中有敏感数据,如何防止被黑客看到?
主要内容
本章解决的是数据内容的安全性,介绍Java的加密和解密技术。学完该章可以通过Java编程对各种数据进行各种形式的加密。密码学也是安全机制的基础。
第三章
解决的主要问题——和源代码相关的安全性
编写好的程序给用户后,用户如果能反编译出源代码怎么办?
定义类、成员变量、方法时如何防止恶意或无意的攻击?
主要内容
本章解决的是和源代码相关的保护。包括源代码、类、成员变量、方法的保护。通过常用的反编译工具加强对源代码保护的认识,使用混淆器和加密等方式对源代码作了初步保护。同时演示了编写程序时如何考虑攻击者对类、成员变量、方法等方面的攻击。
第四章
解决的主要问题——确定数据的完整性和所有者
网上下载了一个程序,如何确定它确实是某某公司开发的?
如何确定黑客没有将程序修改过?
某公司或人发来一个文件,后来他不承认发过这个文件怎么办?
主要内容
第四章起开始介绍和身份认证相关的技术。包括身份确定性、不可篡改性、不可否认性等,该章介绍的消息摘要和签名技术可解决这些问题。
第五章、第六章
解决的主要问题——数字化身份的凭证
实际应用中如何方便地使用摘要和签名技术?
如何确定某个签名确实是某个人或机构的?
主要内容
第五章和第六章介绍基于摘要和签名技术的数字证书。这是Java安全中确定身份的主要技术。其中第五章介绍了数字证书的创建、签发、验证和维护等,第六章介绍了多个证书组成的证书链(CertPath)的创建和验证。
第七章
解决的主要问题——数据安全传输,服务器和用户身份的确定
客户机和服务器之间的通信如何自动进行加密传输?
客户机和服务器之间的通信如何相互确定身份?
浏览器访问一个站点,如何确定这个站点不是黑客的服务器?
主要内容
本章介绍介绍使用加密技术和证书机制的一个实际应用,基于SSL和HTTPS的编程。学完本章可以编写自己的SSL和HTTPS客户及服务器程序。
第八章
解决的主要问题——基于代码来源的程序的安全运行
网上下载了一个程序,运行时会不会删除我的文件,或将某些文件泄漏给黑客?
编写了一个Java Applet,如何让其能访问硬盘上的文件?
主要内容
本章介绍基于代码来源的程序的安全运行,可以基于运行时代码在哪个URL、或代码是谁签名的限制其可以访问哪些用户资源。还介绍了定义自己的权限以及签名Java Applet。
第九章
解决的主要问题——身份验证和基于执行者身份的程序的安全运行
程序需要用户输入账号和口令到数据库登录,但以后可能需要改为智能卡验证。
程序需要访问某个用户资源,但只有用户以某些特殊身份登录时才需要该权限。
主要内容
本章介绍Java验证和授权服务(JAAS),可以方便地更换验证模块,并实现基于身份的授权。
分享到:
相关推荐
《JAVA实例精通源代码》是李相国等专家编著的一本书籍的配套源码集合,旨在通过实际的编程示例帮助读者深入理解和掌握Java语言。这个压缩包中包含了书中各个章节的实例代码,让我们来详细探讨这些源代码中涵盖的知识...
Java波浪文字制作方法及源代码 1个目标文件 摘要:Java源码,初学实例,波浪文字 Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,...
孙卫琴老师的《java网络编程》书籍源代码提供了丰富的实例,帮助初学者深入理解这一领域。以下是根据标题、描述和标签提炼出的相关知识点: 1. **Java网络编程基础**:学习Java网络编程,首先要了解TCP/IP协议栈,...
- **安全性**:Java具有内置的安全特性,如类加载器和安全管理器,用于防止恶意代码执行。 - **健壮性**:强类型检查、异常处理和严格的数据类型转换有助于创建稳定的程序。 - **可移植性**:Java源代码是独立于...
Java是一种广泛使用的面向对象的编程语言,以其跨平台、健壮性和安全性著称。"Java大全书"通常是一本详尽介绍Java编程的教材或参考书籍,旨在帮助开发者全面掌握Java语言的核心概念和技术。这份"java大全书上源代码2...
【基于Java的图书馆管理系统源代码】是一个用于管理图书借阅、归还以及查询等功能的软件系统,它利用Java编程语言实现。Java作为一种广泛使用的高级编程语言,以其跨平台性、面向对象特性和丰富的类库而受到开发者的...
"Java编程案例精解源代码"提供了丰富的实例,帮助学习者深入理解和掌握Java编程技术。这个压缩包文件包含了与书本配套的完整源代码,为读者提供了实践操作的机会,以加深对理论知识的理解。 首先,我们要了解Java的...
9. **泛型**:泛型增强了Java的类型安全性,源代码会展示如何定义和使用泛型类、接口和方法。 10. **注解**:注解为元数据提供了一种方式,用于编译器或运行时系统进行处理。源代码将解释如何创建和使用自定义注解...
Java Web项目开发案例精粹是针对使用Java语言进行Web应用程序开发的一个重要资源集合,它包含了丰富的源代码示例,旨在帮助开发者深入理解并实践Java Web技术。这些源代码实例覆盖了从基础到高级的各种应用场景,有...
总之,这个"图书管理系统+Java源代码+SQL Server数据库文件"提供了一个学习和实践企业级应用开发的绝佳案例。它涵盖了Java编程、数据库设计、前端交互等多个方面,对于想要深入理解软件开发流程和技术栈的人来说,...
9. **泛型**:Java泛型引入了类型参数,提高了代码的类型安全性,减少了强制类型转换,并且增强了容器类的功能。 在《Java2实用教程》的源代码中,你将找到以上知识点的实际应用示例,通过运行和调试这些代码,可以...
《Java.Web开发详解》是一本深入探讨Java在Web开发中的应用的专业书籍,其源代码提供了丰富的实例和练习,帮助读者更好地理解和实践所学知识。在本文中,我们将深入解析这些源代码,探讨其中的关键知识点,旨在提升...
1. **Java基础知识**:Java是一种面向对象的编程语言,由Sun Microsystems(现为Oracle公司)开发,具有平台无关性、安全性和高性能等特点。源代码中可能会涵盖基本语法,如变量声明、数据类型、控制结构(如if语句...
网上书店的Java源代码是一个典型的应用程序开发实例,它展示了如何使用Java编程语言来构建一个基于Web的在线书店系统。这个系统可能包含了多种关键的技术组件和设计模式,这对于学习和理解Java Web开发至关重要。 ...
《JAVA图书馆书库管理系统设计》是一项综合性的软件开发项目,主要目标是利用Java编程语言构建一个高效、便捷的图书管理平台。在这个系统中,管理员可以进行图书的录入、查询、借阅、归还等操作,同时,系统还能提供...
《Java编程艺术》是高永强著作的一本深入讲解Java编程的书籍,由清华大学出版社出版。这本书旨在帮助读者掌握Java编程的核心技术,并提升编程的艺术性。源代码是书中理论知识的具体实践,对于学习和理解书中的概念至...
该书的源代码提供了丰富的实例,帮助读者深入理解书中理论知识,实践操作,提升编程技能。源代码的发布与最新出版的版本同步,确保了学习资料的时效性。 在Java编程中,面向对象编程(Object-Oriented Programming,...
《突破C#编程实例五十讲》是一本针对C#编程的实践教程,旨在通过丰富的实例帮助读者深入理解和掌握C#编程语言。这份源代码集合包含了教程中的所有实例,为学习者提供了直观、可操作的代码资源,使得理论与实践相结合...
《Java程序设计技巧与开发实例》是一本深入探讨Java编程技术的书籍,其源代码rar压缩包包含了书中各个章节的示例程序,旨在帮助读者更好地理解和应用所学知识。通过这些源代码,我们可以深入研究Java语言的核心特性...