1、 初步掌握使用初步掌握使用Java语言编写算法程序的能力。语言编写算法程序的能力。进一步巩固使用进一步巩固使用Java语言编写网络应用程序的能力。语言编写网络应用程序的能力。提高综合运用所学知识解决实际问题的能力。提高综合运用所学知识解决实际问题的能力。了解软件开发的一般步骤、内容和方法。了解软件开发的一般步骤、内容和方法。体会软件工程方法对软件开发的意义和作用。体会软件工程方法对软件开发的意义和作用。了解密钥交换的相关知识。了解密钥交换的相关知识。了解密钥交换的过程和算法。了解密钥交换的过程和算法。制作算法程序流程图。制作算法程序流程图。编写算法程序。编写算法程序。设计系统结构和实现方案。设
2、计系统结构和实现方案。编写密钥交换系统程序。编写密钥交换系统程序。运行测试。运行测试。总结软件开发的一般步骤、内容和方法。总结软件开发的一般步骤、内容和方法。目前常用的比特级数据加密方法,加、解密采用相目前常用的比特级数据加密方法,加、解密采用相同的大数密钥,如同的大数密钥,如IBM提出的数据加密标准(提出的数据加密标准(DES),),加加/解密钥为解密钥为56位二进制数。在加密传输应用中,一方设位二进制数。在加密传输应用中,一方设定了密钥后,需要定了密钥后,需要“告知告知”另一方。如何安全地发送密另一方。如何安全地发送密钥,传统的方法,如采用物理介质或人工送达,成本高、钥,传统的方法,如采用
3、物理介质或人工送达,成本高、效率低、安全性差。效率低、安全性差。发送方和接收方各自设定任意的初始值,通过公共通发送方和接收方各自设定任意的初始值,通过公共通信网络交换基于初始值的计算结果(密钥种子)后,信网络交换基于初始值的计算结果(密钥种子)后,各自在本地生成相同的密钥。各自在本地生成相同的密钥。选择特定的算法选择特定的算法f1、f2,可使,可使k=f2(N,m)=f2(M,n)=k。f1算法不可逆。算法算法不可逆。算法f1、f2是公开的。是公开的。密钥交换双方运行各自的程序,一方以客户机方式连接另一方,设密钥交换双方运行各自的程序,一方以客户机方式连接另一方,设定任意的初始值,系统计算并交
4、换密钥种子,然后计算出密钥。定任意的初始值,系统计算并交换密钥种子,然后计算出密钥。由于使用的计算机和开发工具均为由于使用的计算机和开发工具均为32位系统,只能直接生成最大位系统,只能直接生成最大32位密钥,用位密钥,用DES系数和系数和DES模数处理后,得到模数处理后,得到56位密钥。目前位密钥。目前64位位系统已渐趋普及,升级到系统已渐趋普及,升级到64位后,能直接生成最大位后,能直接生成最大64位密钥。位密钥。f1算法:算法:M=f1(m)=pm mod q N=f1(n)=pn mod q p、q是任意大于是任意大于30bit的数。的数。p、q是公开的。是公开的。f2算法:算法:k=f
5、2(N,m)=Nm mod q k=f2(M,n)=Mn mod q 根据模运算的性质:根据模运算的性质:(pn mod q)m mod q=pnm mod q=pmn mod q=(pm mod q)n mod q 所以:所以:k=k 第三方可以得到第三方可以得到p p、q q、M M和和N N,但由于没有,但由于没有m m和和n n,无,无法计算法计算k k(kk)。数论中已经证明,虽然理论上可以根据)。数论中已经证明,虽然理论上可以根据p p、q q、M M(pm mod qpm mod q)和)和N N(pn mod qpn mod q)推导)推导m m和和n n,但当,但当p p和和
6、q q足够大时(足够大时(3030位以上),这种推导是极其困难的,其位以上),这种推导是极其困难的,其中的计算量足以确保密钥在相当长的时间内不被破解。中的计算量足以确保密钥在相当长的时间内不被破解。虽然虽然PC机可以实现模运算,但象机可以实现模运算,但象pm、pn或或Nm、Mn这样的大数,这样的大数,已远远超出了已远远超出了PC机处理数据的范围,如:为实现一个机处理数据的范围,如:为实现一个30位二进制数位二进制数的密钥交换,可能需要计算的密钥交换,可能需要计算2147483647(32位二进制)的位二进制)的9223372036854775807(64位二进制)次方模除位二进制)次方模除10
7、73741824(30位二位二进制),进制),PC机无法直接完成。机无法直接完成。目前密钥交换均使用小型机或大型机。目前密钥交换均使用小型机或大型机。也有在也有在PC机上用多维数组进行大数模运算的研究,但运算效率机上用多维数组进行大数模运算的研究,但运算效率太低,速度极慢,如完成上述运算需要几个小时。太低,速度极慢,如完成上述运算需要几个小时。本章案例用二进制指数分解法在本章案例用二进制指数分解法在PC机上进行计算,运算效率高,机上进行计算,运算效率高,速度快,如完成上述运算仅需速度快,如完成上述运算仅需1秒。秒。二二进进制制指指数数分分解解法法示示例例 服务端主类编码服务端主类编码 客户端主
8、类编码客户端主类编码 服务端用户窗体类编码服务端用户窗体类编码 客户端用户窗体类编码客户端用户窗体类编码 软件测试软件测试 在针对具体的应用设计软件程序时,通常需要先把在针对具体的应用设计软件程序时,通常需要先把要解决的应用问题搞清楚,明确软件的应用方式、最终要解决的应用问题搞清楚,明确软件的应用方式、最终目标和应提供的具体功能,即先进行问题定义和需求分目标和应提供的具体功能,即先进行问题定义和需求分析。在此基础上,设计软件的总体架构和系统组成,确析。在此基础上,设计软件的总体架构和系统组成,确定软件的运行模式和模块功能,即总体设计。然后,根定软件的运行模式和模块功能,即总体设计。然后,根据总体设计的内容,编写软件代码,即详细设计。最后据总体设计的内容,编写软件代码,即详细设计。最后还要进行软件测试,确保软件运行稳定,功能完整,结还要进行软件测试,确保软件运行稳定,功能完整,结果正确。如果软件中涉及较复杂的运算,通常还需要进果正确。如果软件中涉及较复杂的运算,通常还需要进行算法分析,设计算法程序,并模块化。对于包含数据行算法分析,设计算法程序,并模块化。对于包含数据库的软件,要在需求分析之后进行专门的数据库设计。库的软件,要在需求分析之后进行专门的数据库设计。