1、模块10 Java安全应用r了解Java安全领域和安全特性。掌握使用Commons Codec加密组件包对数据进行消息摘要处理。掌握使用摘要处理和加盐处理验证数据的完整性。了解Java反编译的过程及反编译工具的使用。技能目标2.能够在MyEclipse IDE中使用 O MD5算法对用户信息进行摘要处理。L 能够在 MyEclipse IDE中为Java项目添加 Commons Codec力口密组 件包。3.能够在MyEclipse IDE中 使用SHA算法对用户信息进行 加盐处理。010回顾与思考当计算机和各种移动设备参与到人类的日常生活中,当网络无处不在时,数 据安全成为一个日趋重要的问题
2、。编写安全的代码比编写优雅的代码更为重要,因为安全是一切应用的基石。当今世界高度依赖网络,同时又受制于网络,而网 络的开放性则为其带来了许多不安全的因素。各类企业应用架设在不同层级的网 络平台上,在为用户提供快捷和便利服务支持的同时,也产生了信息安全方面的 隐患。为了满足用户日益增长的信息服务需求,除了不断增扩企业应用的功能和 提高传输效率以外,还需要创建高品质的信息安全服务环境,确保数据信息交流 的安全性。10.2 Java安全性技术10.2.1 Java安全领域Java安全领域分4个部分:JCA(Java cryptography architecture,Java加密体系结构)JCE(J
3、ava cryptography extension,Java加密扩展)JSSE(Java secure sockets extension,Java安全套接字扩展)JAAS(Java authentication and authentication service,Java身份验 证和身份验证服务)10.2 Java安全性技术10.2.1 Java安全领域JCA提供了基本的加密框架,如证书、数字签名、消息 摘要和密钥对产生器。JCE在JCA的基础上进行了扩展,提 供了各种加密算法和密钥管理等功能。在网络传输过程中,数据经过多个主机传送给接收者,存在某台主机被窃听的 安全问题。JSSE能提供
4、确保网络通信安全的服务。JAAS则 提供了在Java平台上进行用户身份鉴别的功能。Java安全领域离不开密码学的支持。10.2 Java安全性技术10.2.2 Java安全特性Java SE平台基于一个动态、可扩展、基于标准、可互 操作的安全架构提供服务。其中内置了加密、身份验证和 授权、公共密钥基础架构等安全特性。Java安全模型基于 一个可定制的沙盒,Java软件程序可在其中安全运行,对系统或用户无潜在风险。表10-1详细介绍了Java的各个安全特性,并给出了包 含更多信息的资源链接。10.2 Java安全性技术10.2.2 Java安全特性表10-1 Java安全特性身份验证和 访问控制
5、摘要身份验证API可通过一个实现多种身份验证机制的一次可插拔架构引人广泛的登录性登录和基于用户或代码签名Java安全架构、Java机制.者身份的细粒度资源访问.身份验证和授权服务一个全面的策略和权限API使JDK 5中新增的时间微签名支(JAAS)、策略实施和开发人员能够创建并管理需要持使签名者证书到期时无须重语法、签名时间戳对安全敏感资源进行细粒度访签代码,因此部署签名代玛更问的应用容易高级特性低级特性优 点参考资料平台安全性Java编译器和虚拟机强制实施 的内置的语言安全特性:强大 的数据类型管理、自动内存管 理、字节码验证、安全的类加载为应用开发和运行提供一个安 全平台。编译时数据类型检
6、查 和H动内存管理可使代码更健 壮减少内存损坏和漏洞.字 节码验证可确保代码符合JVM 规范并防止恶意代码破坏运行 环境.类加载器可防止不受信 任的代码干扰其他Java程序 的运行安全通信Java语言规范加密全面的AH支持广泛的加密服 务其中包括数字签名、消息摘 要、密码(对称、非对称、流和分 组)、消息验证码、密钥生成器 和密钥工厂.支持广泛的标准算法.其中包 括 RSA,DSA、AES、3DES、SHA、PKCS#5、RC2 和 RC4.PKCS#11加密令牌支持为构建安全的应用提供一个可 扩展的、功能齐全的AH:独立 于算法和实现、基于提供程序 的(可插拔)架构公共密钥基 础架构Java
7、加密架构(包括TLS的HTTPS的全面支持AH及以下基标准的安全通 信协议的实现:传输层安全性(TLS)、安全套接字层(SSL),Kerbems(可通过 GSSAPl 访 问)及简单身份验证和安全层(SASL).还包括对基p SSL/对不受信任网络上的同类进行 身份验证.并保护它们之间所 传输数据的完整性和隐私性Java安全套接字扩展(JSSE)Java GSSAPI(JGSS),Java SASL API用于管理密钥和证书的T.具及 支持下列特性和算法的广泛、抽象的AIJ1.(1)证书和证书撤销列表(CRL)X.509.(2)认证路径验证器和构建器 PKIXCRFC 3280)、在线证书状
8、态协设()CSP).(3)密钥库:PKCS#11、PKCS#12.(4)证书存储(信息库):LDAP、java.util.CollectionX.509证书和证书撤简化复杂PKI应用的开发和部销列表(CRL)、Java署。JDK 5中新增的0csp支CertPath API、在线证持为应用检杳证书撤销状态提 供了一种更可扩展和及时的 方法书状态协议(OCSP),Java PKCS#11 参若 指南10.2 Java安全性技术10.2.3辅助工具Commons CodecCommons Codec是 Apache旗下的一款开源软件,主要用于编码格 式的转换,如Base64、二进制、十六进制、字
9、符集和URL编码的转换。Commons Codec还 对Java原生的消息摘要算法进行了封装,提高 了方法的易用性。Commons Codec最新版本的力口密组件包可至U Commons Codec官方网站 http:/commons.apache.org/proper/commons-codec/download_codec.cgi下载,如图 10-1 所示 http:comn e Q C|/Codec-Download Apac.xG谈文件(B 蝴 查看(V)收藏夹 工具 帮助(H)Apache Commonshttp:/commons.apache.org/Apache Commons
10、Codec commons codecLast Published:30 December 2019|Version:1.14ApacheCon Apache CommonsCODECOverviewDownload Users guide Javadoc current Javadoc 1.14 Javadoc 1.13 Javadoc 1.12 Javadoc 1.11 Javadoc 1.10 Javadoc 1.9Download Apache Commons CodecUsing a MirrorWe recommend you use a mirror to download ou
11、r release builds,but you must verify the integrity of the downloaded files using signatures downloaded from our main distribution directories.Recent releases(48 hours)may not yet be available from all the mirrors.图 10-1 Commons Codec官方网站10.2 Java安全性技术10.2.3辅助工具加密组件包分tar.gz和zip两种压缩格式,并以二进制文件和源文件两种方式提
12、供下载。以zip格 5tflcommons-codec-l.ll-bin,其包含了二进制可执行文件、源文件、文档文件和对应的测试文件,如图10-2所示。将压缩文件解压至指定目录位置以备用。010.3数据完整性消息摘要算法也可称为单向加密算法。消息 摘要算法的主要特征是加密过程不需要密钥(在 明文转换为密文或密文转换为明文的算法中所输 入的参数),并且经过加密的数据无法被解密,即单向加密,只有输入相同的明文数据再经过相 同的消息摘要算法处理才能得到相同的密文。工03数据完整性10.3.1准备工作 L创建数据库在myDatabase数据库中新建一个表,并命名为account,SQL命令如下。cre
13、ate table account(account_id int(10)unsigned not null auto_incrementname varchar(20)not null,password varchar(50)not null,email varchar(50)not null,primary key(account_id)auto_increment=1;向account表中插入两条数据记录。插入记录的SQL命令如下。insert into account(name,password,email)values(南京交通,njjt,南京 交通);insert into acco
14、unt(name,password,email)values(Admin,123abe,t);工03数据完整性10.3.1准备工作1.创建数据库对account表的数据记录进行检索的结果如图10-3所示。图10-3 account表的记录工03数据完整性10.3.1准备工作2.创建应用程序文件名为ExamplelO_l.java,其代码如下。0010-1编写一个用户登录应用程序模块,提供用户名和密码登录服务。您10.3数据完整性10.3.2摘要处理L修改用户数据MySQL提供了MD5和SHA1两种消息摘要算法函数:md5()和sha()。使用MD5算法隐 藏用户密码,更新用户密码的SQL命令如
15、下。update account set password=md5(password);再次对account表的 数据记录进行检索,可以 发现用户密码已被加密,结果如图10-4所小。图10-4用md5()处理后的account表的记录您10.3数据完整性10.3.2摘要处理2.修改应用程序【例102】使用Commons Codec加密组件包对输入的用户密码进行MD5摘要处理。首先要向项目添加Commons Codec加密组件 包。在MyEclipse IDE中,右击项目myPro,在弹 出的快捷菜单中选择Properties选项,弹出 Properties for myPro”窗口,在左侧的列
16、项中 选择Java Build Path,再在右侧切换到Libraries”选项卡,如图10-5所示。工03数据完整性10.3.2摘要处理【例1021图 10-5 Properties for myPro窗口工03数据完整性10.3.2摘要处理2.修改应用程序【例1021单击Add External JARs按钮,在弹出的JAR Selection对话 框中找到所需加密组件 包所在的目录位置,如 图10-6所示。名称 修改日期S瞰图片 0却 音乐2氯ii组计算机_(D:)口本地磁盘(E:).My Web Sites o&apidocs 2017/10/17 8:53一 commons-code
17、c-1.112017/10/17 8:53000commons-codec-l.ll-javadoc commons-codec-l.ll-sources commons-codec-l.ll-tests commons-codec-l.ll-test-sources文彳commons-codec-l.ll图 10-6 JAR Selection”对话框2017/10/17 8:532017/10/17 8:532017/10/17 8:532017/10/17 8:53文件夹_Executable Jar FileExecutable Jar File Executable Jar File
18、 Executable Jar File Executable Jar Filewjar/.zip打开9)您10.3数据完整性10.3.2摘要处理2.修改应用程序【例102】单击打开按钮,返回Properties for myPro”窗口,在 Java Build Path”的“Libraries”选项卡中出现了被添加的加 密组件包,如图10-7所示。单击0K按钮结 束操作。展开项目myPro的目录下的nReferenced Libraries文件夹,可以发 现所添加的加密组件包。图10-7加密组件包添加完成您10.3数据完整性10.3.2摘要处理2.修改应用程序【例1021修改Example
19、lO_Ljava文件中的部分代码,粗体部分为修改的代码。文件名为 Examplel0_2.java,其代码如下。运行后按提示分别输入正确的用户名和密码_ o运行结果如下。-请输入用户名:admin其代码见P213-214。1 请输入密码:123abc欢迎访问数据库!您10.3数据完整性10.3.3加盐处理,GCq 常用的消息摘要算法在绝大多数数据库管理系统中都能找到相应的函数支持3 o单凭摘要值长度就能判断出系统大致所采用的摘要算法的类型。为了加大数据破译难度,可使用摘要值长度更长的算法。可是,很多数据库管理系统并没 有提供相应的算法支持。加盐处理是在原有数据中加入其他数据成分以增加数据的复杂
20、度,达到难以 被轻易破译的目的。所加入的盐必须一种用户自有且固定不变的数据。假 如系统要求用户有固定的用户名、电子邮箱等信息,这些信息则可以作为盐 与用户密码相结合,经过摘要处理后获得隐蔽性更强的摘要值。您10.3数据完整性10.3.3加盐处理L修改用户数据修改ExamplelO_Ljava文件中的部分代码,粗体部分为修改的代码。文件名为 Examplel0_2.java,其代码如下。工03数据完整性10.3.3加盐处理再次运行文件Exa mplel 0_2.java请输入用户名:admin 请输入密码:123abc 密码不止确,按提示分别输入正确的用户名和运行结果如下您10.3数据完整性10
21、.3.3加盐处理2.修改应用程序【例103】使用Commons Codec加密组件包对输入的用户密码进行SHA摘要处理。修改Examplel0_2.java文件中的部分代码,粗体部分为修改的代码。文件名为ExamplelO_3.java,其代码如下。_其代码见P215-217。运行后按提示分别输入正确的用户名和密码。运 行结果参照例10 2的运行结果。代码中的 public static String shalHex(String data)方法以十 六进制字符串形式返回SHA消息、摘要信息。IO.4 Java反编译0U1O-4 Java反编译工具JD-GUI的使用。下载JD-GUI-wind
22、ows-1.4.0.zip文件,解压后双击jd-gui.exe文件运行,如图10-9所示图10-9 Java反编译工具JD-GUI)10.4 Java反编译【例104】Java反编译工具JD-GUI的使用。在JD-GUI主窗口中,执行File-Open File”命令,在弹出的打开对话框中选 择需要进行反编译操作的字节码文件,如图10-10所示。查找):_ bin$产国,最近使用桌面,.chiI.ch2i.ch3,ch4 ch5j.ch61 ch7 ch8 ch9 chlOE)Animal国 AOne口 ATwoffl B国 Interface国 MyFirstClass 国 Mylnterf
23、ace I 1 Temp 回 Test*上上力国a网络文件名):Animal,class|文件类型(X):All 0c.e*.!:.*.ja,*.java;,*.1&*.r,丸*ip)I打开1I取消I图10-10 打开对话框IO.4 Java反编译【例104】Java反编译工具JD-GUI的使用。单击打开按钮,返回JD-GUI主窗口,在代码区出现了反编译后的源文件,如图10-11所小。C。cuaauauah图10-11反编译后的源文件?10.5小结IF-/Java安全领域包括JCA、JCE、JSSE和JAAS。Java安全特性包括:平台安全性、加密、身份验证和访问控制、安全通信及公共密钥基础架
24、 构(PKI)。消息摘要算法常用于数据完整性验证。使用Commons Codec加密组件包在Java应用程序中对MySQL数据库中隐藏的数据进 行摘要处理及加盐处理。通过Java反编译工具将字节码文件转换为可阅、读的源文件以深入学习研究Java源程序。LJava安全领域有哪些内容?与密码学有什么关系?2.什么是消息摘要算法?它的作用是什么?3.自己动手在MyEclipse IDE中向Java项目添加 Commons Codec加密组件包。4.什么是Java反编译?107上机实践仿照本模块中的例子,对myDatabase数据库的 accou nt原始表进行以下数据操作。1.用SHA算法对用户密码进行加密,并用Commons Codec加密组件包进行摘要处理。2.用MD5算法对用户密码进行加盐加密,并用 Commons Codec加密组件包进行加盐处理。3.自己找一个完整的Java字节码文件,用Java反编译 工具转换后研读。谢谢观看!