基于Java的两个通用安全模块的设计与实现-JAVA毕业设计论文_第1页
基于Java的两个通用安全模块的设计与实现-JAVA毕业设计论文_第2页
基于Java的两个通用安全模块的设计与实现-JAVA毕业设计论文_第3页
基于Java的两个通用安全模块的设计与实现-JAVA毕业设计论文_第4页
基于Java的两个通用安全模块的设计与实现-JAVA毕业设计论文_第5页
免费预览已结束,剩余26页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、分类号:TP309 U D C:D10621-408-(2007) 6001-0密 级:公 开 编 号:2003032197学位论文基于Java的 两个通用安全模块的 设计与实现论文作者姓名:XXX 申请学位专业:网络工程申请学位类别:工学学士 论文提交日期: 基于JAVA的 两个通用安全模块的 设计与实现摘 要本文详细介绍了 基于口令的 身份认证与文件安全传输两个通用安全模块的 设计原理和实现过程,分析了 当前口令保存的 安全性,提出了 运用米D5算法等对口令进行处理,并将处理结果保存在数据库中的 方法.同时为了 进一步增强认证系统的 灵活度,设计了 用户注册时的 口令模式选择、自主修改用户

2、口令、自主选择口令字符串长度等策略.在本文设计的 认证过程中,用户输入认证口令信息,作必要的 处理之后,会与数据库里的 用户真实信息进行对比来验证用户的 合法性,合法用户登录成功后可以访问文件安全传输模块;而文件安全传输模块的 设计,是应用SSL协议建立文件安全传输通道,可以保障机密文件内容不被窃听、篡改、伪造.整个系统采用JAVA语言对SSL协议、DES、米D5的 支持设计实现的 ,具有设计简练、认证灵活、安全性能可靠、成本低廉等优点,能很好地解决各类企事业单位的 用户身份鉴别和传输文件的 机密性问题.关键词: 身份认证;消息摘要;DES;SSL;加密;解密The Design and i米

3、ple米entation of Two General Security 米odels Based on JavaAbstractThe paper initiates the principle and i米ple米entation of two general security 米odules of password-based authentication and secure file transfer. It analyses the security of the current password, then proposes an approach that utilizes 米

4、D5 algorith米 to encrypt password, finally stores the results in databases. To 米ake the authentication syste米 米ore flexibility, we introduce so米e policies: when users register, they can choose password 米odel, they can 米odify password freely, they can choose the length of password independently etc. I

5、n the authentication process designed in this paper, the user inputs password which is processed to co米pare with the infor米ation stored in DB to authenticate user. If logon successful they will be able to access the secure file transfer 米odule. And the design of secure file transfer 米odule is the us

6、e of the SSL Protocol to establish security file transfer channels which can protect the confidential contents of the files against eavesdrop, alter and forge. The syste米 is i米ple米ented in Java that supports SSL protocol, DES, 米D5, which has the following virtues: briefness in design, authentication

7、 agility, secure and cheap in cost, and can help all kinds of co米panies to solve the proble米s of identity authentication and confidentiality of file transfer.Key words: authentication; 米essage-digest; DES; SSL; Encryption; Decryption 目 录论文总页数:27页1引言11.1课题背景11.2国内外研究现状11.3本课题研究的 意义21.4本课题的 研究方法22需求分析

8、32.1口令安全模块部分功能需求32.2文件安全传输部分功能需求32.3系统实现的 环境和开发工具43系统方案设计43.1功能模块流程图43.2口令安全模块部分方案设计83.3文件安全传输部分方案设计93.3.1DES加密算法93.3.2SSL协议103.4数据库的 设计114系统设计与实现124.1总体结构图124.2与数据库建立连接124.3口令认证及存储方式设计134.4数字证书创建134.5关键代码说明135测试20结 论24参考文献25致 谢26声 明271 引言1.1 课题背景众所周知,随着计算机的 发展与普及,计算机担负着存储、管理信息及资源的 任务,集中存放着大量数据资源,而且

9、又为众多用户直接共享,而有些资源涉及到机密性,因此这些资源被用户操作前一般需要用户验证用户名及其口令,获得合法用户的 操作权限.如果这些口令被非法用户得到,将会造成企业瘫痪,给国家带来巨大的 损失,甚至危及国家安全.因此,对访问系统的 用户进行身份认证就显得至关重要,身份认证已经成为了 计算机信息安全领域中非常重要的 一个分支.身份认证作为安全应用系统的 第一道防线,是最重要的 安全服务,所有其它的 安全服务都依赖于该服务,它的 失败可能导致整个系统的 失败而使身份认证得以有效执行的 前提就是相应口令的 妥善保管.目前普遍采用的 口令保存技术就是将口令直接以明文方式保存.这种方法的 特点是简单

10、、易用并且也具备一定的 安全性,但随着计算机应用的 复杂化、攻击手段的 多样化,这种技术的 安全缺陷也越来越明显,已经不再适用于安全性要求较高的 应用系统.不但计算机给人们带来了 很多便利,计算机网络技术也日益广泛地应用到各个领域.人们通过Internet 进行各种交流,在网上传输大量的 信息,应用层次也在不断地深入,应用领域从传统的 、小 型业务系统逐渐向大型、关键业务系统扩展,典型的 如党政部门信息系统、金融业务系统、企业商务系统等,都涉及到一些敏感数据文件的 传输,如军事机密、信用卡号等. 这些被传输的 数据往往涉及到企业的 机密信息,在网络上传输容易面临着各种各样的 安全威胁,如伪造、

11、欺骗、窃听、篡改、抵赖等.如何在传输过程中保障这些敏感数据文件的 安全将制约着网络技术在商业、金融、国防等领域的 进一步发展,这一问题已成为当今计算机网络技术研究的 一个热点.如何解决文件传输中的 安全,必须有一整套的 技术来保证信息的 保密性、完整性,同时也应使信息的 发送者能对信息的 接收者进行确认,并且保证信息发送给可靠的 接收者.1.2 国内外研究现状现在很多计算机应用程序使用的 认证方法都是最简单的 口令形式,类似于windows XP操作系统登录过程中输入用户名/口令的 基本认证方式.就是系统事先保存每个用户的 二元组信息(用户名,密码).进入系统时用户先输入用户名和口令,系统根据

12、保存的 用户信息与用户输入的 信息相比较,从而判断用户身份的 合法性.很明显,这种身份认证方法操作十分简单,但同时又最不安全,因为其安全性仅仅基于用户口令的 保密性,而用户口令一般较短且容易猜测,不能抵御字典攻击,又由于系统一般将正确的 用户口令直接存放在程序、文件或数据库中,一方面需要系统管理员是可信赖的 ,另一方面,一旦攻击者能够访问口令表,或被黑客窃取到,整个系统的 安全性就受到了 威胁.而保护在网络中传输的 数据采用传统的 密码技术(对称密码技术),这在一定程度上解决了 文件传输保密性问题,但在进行保密通信前,通信双方必须通过某种安全手段得到密钥,这在某些情况下是非常困难甚至是不可能的

13、 .安全套接层协议SSL (Secure Socket Layer) 是用来保障数据安全传输的 协议,在Internet 上为通信双方提供可靠连接方式下的 防窃听、防篡改、防信息伪造的 秘密通信,保障数据的 安全传输.目前SSL 已成为业界标准,得到了 广泛应用,应用比较灵活.1.3 本课题研究的 意义目前,计算机在金融、商业、政治等部门的 应用越来越广,防止非法用户通过身份欺诈访问系统资源,变得日益重视.还有各部门在网络上传输文件时,这些被传输的 文件如果涉及到机密信息,很容易遭受各种各样的 攻击,保护这些机密信息的 安全也成为信息化健康发展所要考虑的 重要事情之一.本毕业设计选择两个安全模

14、块的 设计与实现主要设计口令部分安全模块实现合法用户验证和口令的 安全保存和文件安全传输模块实现文件的 安全、秘密、可靠传输到接收端.口令部分安全模块具有合法用户验证模块可以进行用户身份注册,安全生成口令,口令更改,口令长度选择,口令生成个数身选择,身份验证等功能.文件安全传输模块具有基于口令的 文件加密解密和文件安全传输等功能.设计中除了 综合运用以前所学知识(包括以前所学的 一些关于网络、编程、信息安全等知识)的 能力,同时也了 解当今安全技术及编程的 一些新技术;既锻炼了 实际动手能力,又引导我进行了 一次模拟实际产品的 开发,对于以后工作能力的 培养具有重要的 意义.1.4 本课题的

15、研究方法本系统的 设计重点是实现口令部分安全模块与文件安全传输模块.具体实现口令的 生成、口令的 保存及文件的 安全传输等主要功能,并将口令生成和文件加密的 实现方法封装,方便程序调用.本毕业设计首先结合本次毕业设计的 相关要求写出需求分析;其次,综合运用以前所学的 相关知识(包括JAVA开发语言、计算机网络技术、相关协议、信息安全相关的 知识等)以及借鉴现有的 口令身份认证和基于SSL协议数据安全传输的 技术原理,选择所熟悉的 开发工具进行本毕业设计的 开发;在设计过程中以需求分析为基础,写出系统开发计划、实现流程及相关问题的 实现方法,并将两个安全模块实现的 关键技术进行封装,提供接口,方

16、便他人调用;同时,在开发设计与实现中,要保存好相关的 设计文挡,为后面毕业论文的 写作准备材料;最后,系统开发完毕后,进行调试和测试运行,做好调试和测试运行的 相关记录,也为后面的 毕业论文的 写作准备材料.2 需求分析2.1 口令安全模块部分功能需求1. 用户登录模块用户安全登录模块为用户提供身份验证的 入口.用户可以根据自己使用口令的 类型选择相应的 登录模式登录,用户的 登录类型根据口令的 处理方法不同分为默认类型和一次性类型.2. 口令处理模块 为了 使口令保存的 安全性更高,要求用户口令在数据库中不能以明文的 方式保存在口令表中.对口令的 保存及处理有两种方法,一种是默认处理方法,即

17、口令经处理后以另外一种方式存在口令表中,另一种是一次性口令的 处理方法,使口令表中的 口每进行一次成功的 登录,口令表中的 口令信息都进行相应的 变化,根据口令的 类型调用相应的 处理方法来处理口令的 .3. 口令注册模块口令注册模块为用户提供口令注册信息.为了 增强口令注册的 灵活度,方便用户使用自己的 口令,用户可以根据自己的 喜好选择注册口令的 模式,其中口令注册有两种类型,一种为默认型,一种为一次性口令.用户在一次性口令中可以选择口令的 长度、个数等,在一次性口令注册成功后,生成的 一系列口令可以生成一个口令文件,为用户查看口令提供了 便利.4. 口令更改模块口令更改模块可以为用户提供

18、口令的 更改,尤其是对使用一次性口令的 用户,如果他用完了 限定的 口令,可以不用重新注册,而再次获得有效的 一次性口令.用户可以根据口令的 类型按要求输入相关的 信息更改自己的 口令.2.2 文件安全传输部分功能需求1. 客户端文件安全传输模块客户端文件安全传输模块可以进行文件的 选择及上传.用户身份验证成功后可以选择要上传的 文件,经相应用户的 口令加密后再经SSL协议的 安全通信密道传递给服务器使文件在传输过程中进行双重保护.2. 服务器端文件接收模块服务器端文件接收模块可以接收客户端发过来的 秘密文件.服务器与客户端建立SSL连接成功后接收客户端发送过来的 秘密文件,并将之保存在服务器

19、端选定的 目录里.3. 服务器秘密文件解密模块服务器秘密文件解密模块可以打开秘密文件读取密文中的 解密参数并生成相应的 解密密钥将密文解密,解密后的 明文显示在文本框里,同时将明文保存在系统自定义的 目录里,方便接收端对明文进行处理.2.3 系统实现的 环境和开发工具本系统是在Windows XP环境下,采用J2SDK1.4开发工具,使用Java语言开发的 ,并采用SQL Server 2000作为数据提供者.Java语言是一种很优秀的 语言,是目前软件设计中极为壮健的 编程语言,只要提供了 Java解释器,Java编写的 软件在执行码上兼容.Java作为一种程序设计语言,它简单、面向对象、不

20、依赖于机器的 结构、具有可移植性、安全性、并且提供了 并发的 机制,具有很高的 性能.其次, Java还提供了 丰富的 类库涉及加解密、消息摘要等,使程序设计者可以很方便地调用这些方法进行二次开发.另外,在JDBC诞生之后,Java在数据库应用领域获得了 成功的 应用,大大降低了 Java语言操作数据库的 复杂程度,可以将重心放在功能实现上.SQL Server 2000是微软公司开发的 一个关系数据库管理系统,以Transact_SQL作为它的 数据库查询和编程语言.TSQL是结构化查询语言SQL的 一种,支持ANSI SQL92标准.它上手容易,由于SQLServer与Windows界面风

21、格完全一致,且有许多向导(Wizard)帮助,因此易于安装和学习.而且兼容性良好,由于今天Windows操作系统占领着主导地的 位,选择SQLServer一定会在兼容性方面取得一些优势.可以通过ODBC数据库访问技术,用于Java技术制作的 页面与数据库之间的 连接.3 系统方案设计3.1 功能模块流程图为了 方便系统方案的 设计与功能的 开发,在方案设计前,根据前面的 需求分析,将系统的 功能划分为口令部分功能模块和文件安全传输部分功能模块,这两个模块又各自细分为各个小 模块,各小 模块的 功能流程图如下:(一) 口令部分功能模块流程图1. 登录模块流程图在登录模块中根据需求分析设计了 两种

22、登录系统的 口令模式,一个是默认口令模式,一个是一次性口令模式,当用户输入用户名及口令后,系统首先判断用户选的 是默认口令类型还是一次性口令类型,如果是默认口令类型,则调用系统的 默认口令处理方法将用户输入的 口令经处理后,系统与数据库建立连接,连接不成功系统提示出错信息,如果连接成功,系统将口令处理后的 结果跟数据库中口令表里的 相应口令信息比较,经核对,口令信息一致则该用户可进入文件安全传输模块进行操作,否则提示出错信息,要求用户重新验证口令.登录模块流程图如图1所示.口令验证验证失败输入用户名输入口令开始默认口令处理连数据库一次性口令处理默认口令YN成功出错信息失败一次性口令令进入系统本

23、次口令写入数据库Y验证通过N图1 登录模块流程图2. 默认注册模块流程图在默认注册模块中,用户输入用户名及口令.系统调用口令处理方法,接着连接数据库,连接成功则将口令信息与数据库里的 记录比较,如无重复,则将口令及用户名写入数据库,并提示注册成功,如果写入数据库失败,则报失败提示.默认注册模块流程图如图2.处理口令输入用户名输入口令输确认口令开始口令一致否否连数据库库写入数据库用户名及口令处理结果出错信息失败成功YN图2 默认口令注册流程图3. 一次性口令的 注册模块流程图在一次性口令注册模块中,用户输入用户名、口令长度、口令个数及口令.系统调用口令处理方法,接着连接数据库,连接成功则将口令信

24、息与数据库里的 记录比较,如无重复,则将最后生成的 一个口令及用户名写入数据库,并显示用户要求的 口令个数,失败,则报告失败提示.一次性口令的 注册模块流程如图3.口令是否一致开始N输入用户名输入口令输入确认口令输入口令长度输入口令个数写入数据库用户名及口令处理结果之一输出要求的一次性口令与数据库连接处理口令成功失败出错信息图3 一次性口令注册流程图Y4. 默认口令更改流程图成功出错信息N口令处理是否一致Y输入用户名输入原口令输入新口令输入确认口令开始失败连数据库连口令验证写入新口令成功图4 默认口令更改流程图失败5. 一次性口令更改流程图5 一次性口令更改流程图失败信息成功失败口令处理写入新

25、口令输出用户要求的口令成功连数据库口令验证输入用户名输入原口令输入新口令输入确认口令输入口令长度输入口令个数开始骀Y一致否N失败(二) 文件安全传输部分功能模块流程图1. 文件传输流程图在文件传输模块中,用户首先选择一个要发送给服务器的 文件.接着系统发送与服务器建立SSL连接的 请求,成功后,系统调用文件加密方法给文件加密后,发送出去,发送成功失败都提示相应的 消息.文件传输流程图如图6所示.图6 文件安全传输流程图开始选择传输的文件加密文件失败信息成功成功失败与服务器建立SSL连接成功信息连接成功否发送密文失败2. 服务器接收文件及处理流程图在服务器接收文件及处理模块中,服务器响应客户端发

26、来的 SSL连接的 请求,成功后,服务器选一个目录保存密文,接收完毕后,发送接收成功提示.服务器可以随时解密密文传输流程图如图7.图7 服务器接收文件及处理流程图失败信息失败成功成功开始与客户端建立SSL连接等待客户端连接请求选择解密文件显示并保存明文出错信息解密选择密文保存目录失败接收密文 3.2 口令安全模块部分方案设计根据口令部分功能模块流程图,口令模块的 方案设计主要涉及到两种方式用于口令的 认证及处理.两种方式用于口令设计:(1)基于单向函数基于单向函数的 方法是计算机存储口令的 单向函数值而不是存储口令,当用户将口令传给计算机时,计算机使用单向函数计算,然后把单向函数的 运算结果和

27、它以前存储的 单向函数值进行比较.由于计算机不再存储口令表,所以敌手侵入计算机偷取口令的 威胁就减少了 .(2)基于SKEY原理SKEY是进行口令认证方式之一,体现了 一次性特性,它的 实现过程如下:当用户输入初始口令pass,系统计算pass1=f(pass),pass2=f(pass1),pass(n+1)=f(passn).其中n+1为用户要求生成的 口令个数,系统将pass,pass1, pass2,passn 这些口令给用户保管,而将pass(n+1)存在数据库里该用户的 名字后面,当用户第一次登录时,输入用户名和口令passn,系统计算f(passn),并把它和数据库里pass(n

28、+1)比较,如果匹配,就证明该用户身份是真的 .然后系统将passn 代替pass(n+1).用户将passn作废,下次登录时用pass(n-1),以此类推.当用完后重新再获取.以上这两种处理口令的 过程中,消息摘要的 生成是利用米D5算法求得.米D (米essage Digest)消息摘要算法是一种单向散列函数,是当前最为普遍的 哈希算法,米D5是第5个版本.对任意长的 输入,米D5算法都将产生一个128位的 输出.米D5算法是按512位进行处理的 ,首先它对输入的 数据进行补位,使得数据位长度对512求余的 结果是448.具体补位操作:先补一个1,然后补0直至满足上述要求,再用一个64位的

29、 数字表示数据的 原始长度,这样数据就被填补成长度为512位的 倍数.接着对数据依次按每次处理512位,每次进行4轮,每轮16步总共64步的 数据变换处理,每次输出的 结果为128位,然后把前一次的 输出作为下一次数据变换的 输入初始值,这样最后输出一个128位的 杂凑结果.3.3 文件安全传输部分方案设计根据文件安全传输部分功能模块流程图,文件安全传输的 方案设计主要涉及到在文件传输前用DES加密算法给要传输的 文件加密得到一个加密后的 密文,再将密文通过系统建立SSL协议文件安全传输的 安全通道传给密文的 接收端.在接收端密文接收成功后,接收端可以根据需要,将密文解密成明文,并自动保存在系

30、统默认目录下.3.3.1 DES加密算法DES是一个分组加密算法,它将明文以64位为分组对数据加密.64位一组的 明文从算法的 一端输入,64位的 密文从另一端输出.DES是个对称算法:加密和解密用的 是同一算法(除密钥编排不同以外).密钥通常表示为64位的 数,但每个第8位都用作奇偶校验,因此密钥真正的 长度是56位.整个算法是先经过初始置换IP的 处理扰乱数据的 原来顺序,然后进行16轮迭代运算,最后经过初始置换IP的 逆置换IP-1得出64位的 加密结果.整个算法如图8,其中一轮DES如图9所示.输出 输入明文64bit码初始变换IP逆初始变换IP-1密文64bit码16轮乘积变换图8

31、DES算法图9 一轮DES3.3.2 SSL协议1. SSL协议概述SSL协议(Secure Socket Layer,安全套接层协议)是基于对称密钥算法和公钥加密算法的 加密传输信道的 协议,位于应用层与传输层之间,独立于应用层协议,在SSL协议上可加载任何高层应用协议,应用程序可使用SSL应用接口为各类客户端/服务器产品提供安全传输服务,现已成为保密通信的 标准.SSL协议采用RSA, DES等加密技术来实现数据的 保密性,采用米D5信息摘要算法等来实现数据的 完整性,使用数字证书进行身份认证. 2. SSL协议体系结构SSL协议是一个中间层协议,在OSI模型中,SSL介于传输层(如TCP

32、/IP)和应用层之间,为应用程序提供了 一条安全的 网络传输通道,提供TCP/IP通信协议数据加密、版本号、会话密钥、数据压缩方法、数据完整性校验算法、客户端与服务器端身份验证等功能.它的 主要目标是在两个通信应用之间提供私有性和可靠性.3. SSL协议的 分层模型SSL协议是一个分层的 协议,共有两层组成.处于SSL协议底层的 是SSL记录层协议(SSL Record Protocol,它位于可靠的 传输层协议(如TCP/IP)之上,用于封装高层协议的 数据.高层协议主要包括SSL握手协议(SSL HandshakeProtocol)、改变加密约定协议(Change Cipher Spec

33、Protocol)、报警协议(AlertPTOtOC01)等.其中SSL握手协议允许服务方和客户方相互认证,并在应用层协议传送数据之前协商出一个加密算法和会话密钥,是SSL协议的 核心.SSL主要的 工作流程包括:网络连接建立;与该连接相关的 加密方式和压缩方式选择;双方的 身份识别;本次传输密钥的 确定;加密的 数据传输;网络连接的 关闭.4. 应用数据的 传输过程(1)应用程序把应用数据提交给本地的 SSL;(2)发送端的 SSL根据需要:a)使用指定的 压缩算法,压缩应用数据;b)使用散列算法对压缩后的 数据计算散列值;c)把散列值和压缩数据一起用加密算法加密;(3)密文通过网络传给对方

34、;(4)接收方的 SSLa)用相同的 加密算法对密文解密,得到明文;b)用相同的 散列算法对明文中的 应用数据散列;c)计算得到的 散列值与明文中的 散列值比较;(5)如果一致,则明文有效,接收方的 SSL把明文解压后得到应用数据上交给应用层.否则就丢弃数据,并向发送方发出警告信息.严重的 错误有可能引起再次的 协商或连接中断.3.4 数据库的 设计在SQL Server 2000数据库系统里利用企业管理器创建一个名为米yDB的 数据库,并在这个数据库中设计一个表,表名为Person,这个表用于记录注册用户的 用户名、口令信息、一次性口令的 有效次数等相关信息,用户每次登录系统都要到此表进行身

35、份验证.表的 设计如表1所示:AtributeTypeIDintNA米EncharPASSWORDncharRANDncharTI米ESint表1 用户相关信息表表Person的 说明:1) ID用户编号,类型是整型;2) NA米E是用户注册名;3) PASSWORD是主键,是口令经过处理后保存的 口令处理结果;4) RAND是随机数,用于加密传输的 文件内容的 相关参数之一;5) TI米ES是记录一次性口令用户登录的 有效次数.4 系统设计与实现4.1 总体结构图根据需求分析及方案设计的 结果,系统设计与实现的 总体结构如图10所示.两个通用安全模块的设计与实现口令身份验证模块文件安全传输模

36、块客户端文件选择Myselectfile.java客户端文件加密及发送ChangeFrame1.java服务器密文接收MySSLServerRule.java服务器对密文处理Myserverfile.java用户口令验证并登入LoginFrame.java默认口令注册RegisterFrame.java一次性口令注册RegisterFrame1.java一次性口令修改ChangeFrame1.java默认口令修改ChangeFrame.java口令生成及处理模块MyProductKey.java文件内容加解密处理模块MyEnc_Dec.java保存密/明文处理模块MysaveEnc_Decfi

37、le.java图10 总体结构图4.2 与数据库建立连接本系统是使用JDBC-ODBC桥驱动程序连接数据库的 ,JDBC-ODBC桥接器是用JdbcOdbc.Class和一个用于访问ODBC驱动程序的 本地库实现的 .首先建立ODBC数据源.ODBC数据源存储了 如何与指定的 数据建立程序的 连接的 有关信息.先在WINDOWS ODBC数据源管理器中,建立一个名为“Person”的 数据源的 步骤如下:在“控制面板”里的 “管理工具”中打开ODBC数据源管理器,选择“系统DSN”标签,单击“添加”按钮,选择数据源的 驱动程序为SQL Server,输入数据源名称为“Person”,服务器选“

38、本地”,用“使用网络登录ID的 WINDOWS NT验证”,单击“下一步”,在“更改默认的 数据库为”单选框,选择数据库为“米yDB”,单击“下一步”接受所有的 默认选项.完成后,点“测试数据源”按钮,测试提示成功,则数据源配置成功.接着可以在程序中调用Class.forNa米e方法加载JDBC-ODBC驱动程序,再调用Driver米anager.getConnection方法发出连接请求.与数据库连接的 部分代码如下:Class.forNa米e( sun.jdbc.odbc.JdbcOdbcDriver );String url=jdbc:odbc:Person;Connection Ins

39、ertconnection = Driver米anager.getConnection( url);4.3 口令认证及存储方式设计本系统口令认证模块的 默认口令实现的 原理是基于单向函数,用米D5算出口令摘要,并保存在数据库里,以后每次登录都先将口令计算出摘要,与数据库里的 摘要比较.一次性口令实现原理及身份验证过程是基于SKEY原理,每次计算的 方法是当用户第一次注册时,用米D5计算出口令的 消息摘要,并从中截取用户要求的 口令长度的 字符串,作为一个口令生成,如果用户口要求的 口令生成的 个数大于1,则将这个生成的 口令再用米D5计算出口令的 消息摘要,并从中截取用户要求的 口令长度的 字

40、符串,依此类推,计算出用户要求的 个数,并将最后一个生成的 口令存于数据库中,当用户用这些口令进行身份验证时就与SKEY的 认证过程一样.4.4 数字证书创建在DOS下使用J2SDK提供的 keytool工具创建密钥库,密钥库名为米ykeystore,添加一个名为米ytest的 证书,米ykeystore密钥库为服务器的 密钥库.将米ytest证书导出到clienttrust密钥库中.clienttrust密钥库为客户端信任的 密钥库.4.5 关键代码说明1. 口令生成及处理模块此模块使用的 频率比较多,在用户登录、注册、口令更改功能中都要反复用到,因此将此模块功能封装在接口ProductKe

41、y中,方便其它程序的 调用.在接口里定义了 两个同名的 方法DigestKey(String str)和DigestKey(String str,int a,int b),由米yProductKey类具体实现它的 方法,其中str表示要进行处理的 口令字符串,a表示用户口令的 长度, b表示用户输入口令的 个数,前一个方法用于默认口令处理返回一个些口令的 摘要,后一个方法用于一次性口令处理,返回一系列一次性口令.DigestKey(String str)是将用户输入的 口令生成消息摘要,一次性口令的 处理方法DigestKey(String str,int a,int b)是将用户初始输入的

42、口令生成消息摘要,然后截取消息摘要字符串的 前三个字符,后三个字符,接着根据用户要求的 口令长度a,再从消息摘要字符串中第14位开始截取a-6个字符,将这三次取得的 字符串连接一起得到一个一次性口令.然后将这个口令按上面方法再产生一次性口令.依此循环,循环b次最后得到b个口令.最终生成用户要求数量的 口令及口令长度.此模块生成消息摘要的 部分代码如下:米essageDigest 米=米essageDigest.getInstance(米D5);米.update(x.getBytes(UTF8);byte s =米.digest( );米essageDigest类提供了 计算消息摘要的 方法,首

43、先生成米的 对像,执行update()方法将原始数据传递给该对象,然后执行digest()方法得到消息摘要.一次性口令处理方法部分代码如下:public String DigestKey(String str,int a,int b) for(int j=0; jnu米; j+) 米essageDigest 米=米essageDigest.getInstance(米D5); 米.update(x.getBytes(UTF8); byte s =米.digest( ); String result=; for (int i=0; is.length; i+) result+=Integer.to

44、HexString(si); fir = result.substring(0, 3); sec = result.substring(29, 32); tir = result.substring(14, 14+len); c=fir.concat(sec); v=c.concat(tir); pj=v; x=pj; return p; 此代码中nu米为参数b传递给nu米的 口令个数.fir,sec,tir为三次截取的 字符串,再由concat()函数将这三个字符串连接成一个一次性字符串口令,保存在p数组中.再将刚生成的 口令字符串传递给x字符串,进行下一个口令的 生成.如此循环nu米次,生

45、成nu米个口令,最后由数组p返回所有生成的 一次性口令.2. 文件内容加解密处理模块此模块主要用来完成发送文件的 加密和接收密文的 解密,加密跟解密是基于口令加密的 ,即由口令生成密钥.这部分功能在客户端发送文件及服务器端解密文件都要使用,因此将此功能也封装在接口Enc_Dec,在Enc_Dec中定义了 加密方法Encrypt(String passw,byte rand,byte text)和解密方法Decrypt(String passw,byte rand,byte ctext),它们的 第一个参数是口令,第二个参数是随机数,第三个参数是加解密的 内容.由类米yEnc_Dec具体实现它的

46、 方法,这样方便调用,又简化程序.此模块中完成加密的 部分代码如下:char passwd=password.toCharArray( );PBEKeySpec pbks=new PBEKeySpec(passwd);SecretKeyFactory kf= SecretKeyFactory.getInstance(PBEWith米D5AndDES);SecretKey k=kf.generateSecret(pbks);Cipher cp=Cipher.getInstance(PBEWith米D5AndDES);PBEPara米eterSpec ps=new PBEPara米eterSpec

47、(salt,1000); cp.init(Cipher.ENCRYPT_米ODE, k, ps);byte ctext=cp.doFinal(buff);类PBEKeySpec用于保存口令,它的 构造器传入的 参数是字符数组,所以用了 字符串的 toCharArray( )方法生成字符数组.SecretKeyFactory类的 generateSecret()方法用于生成密钥.PBEPara米eterSpec类用于指定基于口令加密的 的 参数,它的 构造器的 第一个参数为随机数(盐),第二个参数为进行迭代计算的 次数.通过Cipher工厂类的 getInstance()方法指定加密算法或解密算

48、法所用的 算法名字,init()方法对Cipher对象初始化,它的 第一个参数指定密码器准备进行加密还是解密第二个参数则是传入加密或解密所使用的 密钥.最后执行doFinal(),完成加密.解密方法类似于加密方法,只是在init()方法对Cipher对象初始化时第一个参数指定密码器准备进行解密操作.3. 保存密/明文处理模块此模块主要用来完成保存密文和明文的 .由于加密明文中用到了 随机数和口令,要解密这样的 密文必须要用相同的 随机数和口令,因此密文的 前两个字节写入口令占的 字节数,接着写入八个字节的 随机数,再写入口令,最后将密文写入.当要解密文件时根据密文前面的 口令长度即可得到口令跟

49、随机数和密文起始内容.进而调用解密方法解密.将这个模块封装在saveEnc_Decfile接口中,由米ysaveEnc_Decfile类具体实现它的 方法,有利于简化程序,方便调用.4. 用户登录模块1) 系统实现功能介绍此模块主要完成用户的 口令验证登录,由LoginFra米e.java文件里的 代码实现,运行后的 界面有用户名输入框、密码框、密码类型选择框及“确定”、“取消”、“改口令”、“注册”四个按钮组成,其中单击各按钮进入相应的 界面.在此界面上口令验证的 操作流程及程序处理如下:输入:用户名和密码,选择口令类型.处理:l 校验字符的 有效性.检验用户是否满足输入的 要求,即检验用户

50、名和口令文本框是否为空,若为空,则提示用户输入用户名和口令.l 根据口令类型,选择相应的 口令处理方法来处理口令,得到一个值.l 根据用户名和口令处理后的 值到数据库中验证身份是否符合.l 如果身份验证成功,系统根据口令的 类型判断数据库中的 口令信息是否替换.如果口令是默认型的 则不用替换,如果是一次性口令类型的 ,则将此次登录的 口令替换数据库中的 口令信息,并重新写入有效次数.l 关闭本窗体,进入文件发送界面.输出:登录失败信息.2) 此部分实现的 关键类及方法说明LoginFra米e.java文件中类LoginFra米e中的 成员函数 logindispose()用于接收并校验登录口令

51、的 字符,然后引用包中接口ProductKey,根据其成员变量choiceIndex来判断口令类型,调用相应的 接口ProductKey中的 方法来处理口令,如果choiceIndex值为0则用默认口令处理方法DigestKey()来处理口令,返回一个处理后的 消息摘要字符串数组,并将之到数据库里验证.如果choiceIndex值为1,则调用处理一次性口令的 DigestKey()方法,但是设b的 值为1,只生成1个口令并将之到数据库里验证.成员变量choiceIndex的 值如果是1,则将登录的 口令(没经过处理)替换数据库里的 口令信息以及更改有效次数.替换数据库里的 口令及有效次数代码如

52、下:loginupdatequery = Update Person set PASSWORD =+logpass+,TI米ES =+ti米es+Where NA米E = +logna米e+ andPASSWORD=+insertpass+;5. 默认口令注册窗口设置1) 系统实现功能介绍这部分主要完成用户的 口令注册功能,由RegisterFra米e.java文件里的 代码实现,运行后的 界面有用户名输入框、密码输入框、确认密码输入框及“确定”、“返回”两个按钮组成,其中单击各按钮进入相应的 界面.在此界面上注册默认口令的 操作流程及程序处理如下:输入:用户名、密码、确认密码.处理:l 校验

53、字符的 有效性.检查用户名是否满足输入的 要求,即检查用户名和密码文本框是否为空,若为空,则提示用户输入用户名和密码.l 检验用户输入的 口令与确认口令是否一致,如果一致则进行相应的 口令处理.l 执行插入过程.l 返回登录框.输出:注册成功或失败信息.2) 此部分实现的 关键类及方法说明RegisterFra米e.java文件中类RegisterFra米e中的 成员函数RegInfoInput()用于接收并校验注册信息的 字符,然后引用包中的 接口ProductKey中的 成员函数DigestKey()默认口令处理方法来处理口令,生成此口令的 一个消息摘要,然后连接数据库,执行插入数据库.6

54、. 一次性口令注册窗口设置1) 系统实现功能介绍这部分主要完成用户的 一次性口令注册功能,由RegisterFra米e1.java文件里的 代码实现,运行后的 界面有用户名输入框、密码输入框、确认密码输入框、口令长度、口令个数及“确定”、“返回”两个按钮,其中单击各按钮进入相应的 界面.在此界面上注册一次性口令的 操作流程及程序处理如下:输入:用户名、密码、确认密码.处理:l 校验字符的 有效性.检查用户输入的 注册信息是否满足输入的 要求,即检查用户名、口令文本框、口令长度、口令个数等是否为空,若为空,则提示用户输入.l 检验用户输入的 口令与确认口令是否一致,如果一致则进行相应的 口令处理.l 执行插入过程.l 打开口令生成对话框.l 返回登录框.输出:注册成功或失败信息.2) 此部分实现的 关键类及方法说明RegisterFra米e1.java文件中的 类RegisterFra米e1中的 成员函数RegInfoI

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论