论文无忧网提供:计算机毕业论文范文|计算机毕业设计|计算机毕业论文
栏目导航 ASP Java Web .NET VB6.0 JAVA VC VF DELPHI PB 计算机网络 计算机科学与技术 PHP 安卓APP 其他 C# 代写论文
当前位置: > 计算机 > 计算机科学与技术 >

基于java的两个通用安全模块(论文+程序)

4.2  与数据库建立连接

本系统是使用JDBC-ODBC桥驱动程序连接数据库的,JDBC-ODBC桥接器是用JdbcOdbc.Class和一个用于访问ODBC驱动程序的本地库实现的。首先建立ODBC数据源。ODBC数据源存储了如何与指定的数据建立程序的连接的有关信息。 内容来自www.paper51.com

先在WINDOWS ODBC数据源管理器中,建立一个名为“Person”的数据源的步骤如下:在“控制面板”里的“管理工具”中打开ODBC数据源管理器,选择“系统DSN”标签,单击“添加”按钮,选择数据源的驱动程序为SQL Server,输入数据源名称为“Person”,服务器选“本地”,用“使用网络登录ID的WINDOWS NT验证”,单击“下一步”,在“更改默认的数据库为”单选框,选择数据库为“MyDB”,单击“下一步”接受所有的默认选项。完成后,点“测试数据源”按钮,测试提示成功,则数据源配置成功。接着可以在程序中调用Class.forName方法加载JDBC-ODBC驱动程序,再调用DriverManager.getConnection方法发出连接请求。与数据库连接的部分代码如下:

内容来自www.paper51.com

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver" );

copyright paper51.com

Stringurl="jdbc:odbc:Person";

http://www.paper51.com

Connection Insertconnection = DriverManager.getConnection(url);

内容来自论文无忧网 www.paper51.com

4.3  口令认证及存储方式设计 内容来自www.paper51.com

本系统口令认证模块的默认口令实现的原理是基于单向函数,用MD5算出口令摘要,并保存在数据库里,以后每次登录都先将口令计算出摘要,与数据库里的摘要比较。

内容来自www.paper51.com

一次性口令实现原理及身份验证过程是基于SKEY原理,每次计算的方法是当用户第一次注册时,用MD5计算出口令的消息摘要,并从中截取用户要求的口令长度的字符串,作为一个口令生成,如果用户口要求的口令生成的个数大于1,则将这个生成的口令再用MD5计算出口令的消息摘要,并从中截取用户要求的口令长度的字符串,依此类推,计算出用户要求的个数,并将最后一个生成的口令存于数据库中,当用户用这些口令进行身份验证时就与SKEY的认证过程一样。

paper51.com

4.4  数字证书创建 内容来自www.paper51.com

在DOS下使用J2SDK提供的keytool工具创建密钥库,密钥库名为mykeystore,添加一个名为mytest的证书,mykeystore密钥库为服务器的密钥库。将mytest证书导出到clienttrust密钥库中。clienttrust密钥库为客户端信任的密钥库。 内容来自www.paper51.com

4.5  关键代码说明

内容来自www.paper51.com

1.    口令生成及处理模块 内容来自论文无忧网 www.paper51.com

此模块使用的频率比较多,在用户登录、注册、口令更改功能中都要反复用到,因此将此模块功能封装在接口ProductKey中,方便其它程序的调用。在接口里定义了两个同名的方法DigestKey(Stringstr)和DigestKey(String str,int a,int b),由MyProductKey类具体实现它的方法,其中str表示要进行处理的口令字符串,a表示用户口令的长度, b表示用户输入口令的个数,前一个方法用于默认口令处理返回一个些口令的摘要,后一个方法用于一次性口令处理,返回一系列一次性口令。

paper51.com

DigestKey(String str)是将用户输入的口令生成消息摘要,一次性口令的处理方法DigestKey(String str,int a,int b)是将用户初始输入的口令生成消息摘要,然后截取消息摘要字符串的前三个字符,后三个字符,接着根据用户要求的口令长度a,再从消息摘要字符串中第14位开始截取a-6个字符,将这三次取得的字符串连接一起得到一个一次性口令。然后将这个口令按上面方法再产生一次性口令。依此循环,循环b次最后得到b个口令。最终生成用户要求数量的口令及口令长度。

内容来自论文无忧网 www.paper51.com

此模块生成消息摘要的部分代码如下:

内容来自www.paper51.com

MessageDigestm=MessageDigest.getInstance("MD5");

内容来自论文无忧网 www.paper51.com

m.update(x.getBytes("UTF8")); paper51.com

byte s[ ]=m.digest( ); paper51.com

MessageDigest类提供了计算消息摘要的方法,首先生成m的对像,执行update()方法将原始数据传递给该对象,然后执行digest()方法得到消息摘要。 内容来自www.paper51.com

一次性口令处理方法部分代码如下: http://www.paper51.com

public String[] DigestKey(Stringstr,int a,int b){

copyright paper51.com

          ……

paper51.com

           for(int j=0;j<num; j++){

http://www.paper51.com

MessageDigestm=MessageDigest.getInstance("MD5");

paper51.com

              m.update(x.getBytes("UTF8"));

内容来自www.paper51.com

              byte s[ ]=m.digest( );

内容来自论文无忧网 www.paper51.com

              String result="";

内容来自www.paper51.com

              for (int i=0; i<s.length; i++){

内容来自论文无忧网 www.paper51.com

                    result+=Integer.toHexString(s[i]); copyright paper51.com

                     }

http://www.paper51.com

               fir = result.substring(0, 3);

http://www.paper51.com

               sec = result.substring(29, 32); copyright paper51.com

               tir = result.substring(14, 14+len); 内容来自www.paper51.com

                c=fir.concat(sec); paper51.com

                v=c.concat(tir);

http://www.paper51.com

               p[j]=v;

copyright paper51.com

               x=p[j];

http://www.paper51.com

         } copyright paper51.com

          return p;

内容来自论文无忧网 www.paper51.com

        }

http://www.paper51.com

此代码中num为参数b传递给num的口令个数。fir,sec,tir为三次截取的字符串,再由concat()函数将这三个字符串连接成一个一次性字符串口令,保存在p数组中。再将刚生成的口令字符串传递给x字符串,进行下一个口令的生成。如此循环num次,生成num个口令,最后由数组p返回所有生成的一次性口令。 内容来自www.paper51.com

2.    文件内容加解密处理模块 内容来自论文无忧网 www.paper51.com

此模块主要用来完成发送文件的加密和接收密文的解密,加密跟解密是基于口令加密的,即由口令生成密钥。这部分功能在客户端发送文件及服务器端解密文件都要使用,因此将此功能也封装在接口Enc_Dec,在Enc_Dec中定义了加密方法Encrypt(String passw,byte[] rand,byte[] text)和解密方法Decrypt(String passw,byte[] rand,byte[] ctext),它们的第一个参数是口令,第二个参数是随机数,第三个参数是加解密的内容。由类MyEnc_Dec具体实现它的方法,这样方便调用,又简化程序。 内容来自www.paper51.com

此模块中完成加密的部分代码如下: copyright paper51.com

char[] passwd=password.toCharArray( );

内容来自论文无忧网 www.paper51.com

PBEKeySpec pbks=new PBEKeySpec(passwd);

内容来自www.paper51.com

SecretKeyFactory kf= http://www.paper51.com

            SecretKeyFactory.getInstance("PBEWithMD5AndDES"); 内容来自www.paper51.com

SecretKey k=kf.generateSecret(pbks);

copyright paper51.com

Ciphercp=Cipher.getInstance("PBEWithMD5AndDES"); 内容来自论文无忧网 www.paper51.com

PBEParameterSpec ps=newPBEParameterSpec(salt,1000);      

http://www.paper51.com

                   cp.init(Cipher.ENCRYPT_MODE,k, ps);

paper51.com

byte ctext[]=cp.doFinal(buff);

paper51.com

类PBEKeySpec用于保存口令,它的构造器传入的参数是字符数组,所以用了字符串的toCharArray( )方法生成字符数组。SecretKeyFactory类的generateSecret()方法用于生成密钥。PBEParameterSpec类用于指定基于口令加密的的参数,它的构造器的第一个参数为随机数(盐),第二个参数为进行迭代计算的次数。通过Cipher工厂类的getInstance()方法指定加密算法或解密算法所用的算法名字,init()方法对Cipher对象初始化,它的第一个参数指定密码器准备进行加密还是解密第二个参数则是传入加密或解密所使用的密钥。最后执行doFinal(),完成加密。解密方法类似于加密方法,只是在init()方法对Cipher对象初始化时第一个参数指定密码器准备进行解密操作。 http://www.paper51.com

3.    保存密/明文处理模块

copyright paper51.com

此模块主要用来完成保存密文和明文的。由于加密明文中用到了随机数和口令,要解密这样的密文必须要用相同的随机数和口令,因此密文的前两个字节写入口令占的字节数,接着写入八个字节的随机数,再写入口令,最后将密文写入。当要解密文件时根据密文前面的口令长度即可得到口令跟随机数和密文起始内容。进而调用解密方法解密。将这个模块封装在saveEnc_Decfile接口中,由MysaveEnc_Decfile类具体实现它的方法,有利于简化程序,方便调用。 paper51.com

4.    用户登录模块 http://www.paper51.com

1)       系统实现功能介绍 内容来自论文无忧网 www.paper51.com

此模块主要完成用户的口令验证登录,由LoginFrame.java文件里的代码实现,运行后的界面有用户名输入框、密码框、密码类型选择框及“确定”、“取消”、“改口令”、“注册”四个按钮组成,其中单击各按钮进入相应的界面。 内容来自论文无忧网 www.paper51.com

在此界面上口令验证的操作流程及程序处理如下: copyright paper51.com

输入:用户名和密码,选择口令类型。 http://www.paper51.com

处理:

内容来自www.paper51.com

l     校验字符的有效性。检验用户是否满足输入的要求,即检验用户名和口令文本框是否为空,若为空,则提示用户输入用户名和口令。 内容来自www.paper51.com

l     根据口令类型,选择相应的口令处理方法来处理口令,得到一个值。

copyright paper51.com

l     根据用户名和口令处理后的值到数据库中验证身份是否符合。 http://www.paper51.com

l     如果身份验证成功,系统根据口令的类型判断数据库中的口令信息是否替换。如果口令是默认型的则不用替换,如果是一次性口令类型的,则将此次登录的口令替换数据库中的口令信息,并重新写入有效次数。

copyright paper51.com

l     关闭本窗体,进入文件发送界面。

内容来自论文无忧网 www.paper51.com

输出:登录失败信息。 内容来自论文无忧网 www.paper51.com

2)       此部分实现的关键类及方法说明

paper51.com

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

替换数据库里的口令及有效次数代码如下: paper51.com

loginupdatequery= "Update Person set PASSWORD ='"+logpass+"',TIMES="+times+"Where NAME = '"+logname+ "'and    PASSWORD='"+insertpass+"'";

内容来自论文无忧网 www.paper51.com

5.    默认口令注册窗口设置

内容来自www.paper51.com

1)       系统实现功能介绍 内容来自www.paper51.com

这部分主要完成用户的口令注册功能,由RegisterFrame.java文件里的代码实现,运行后的界面有用户名输入框、密码输入框、确认密码输入框及“确定”、“返回”两个按钮组成,其中单击各按钮进入相应的界面。 内容来自论文无忧网 www.paper51.com

在此界面上注册默认口令的操作流程及程序处理如下:

内容来自论文无忧网 www.paper51.com

输入:用户名、密码、确认密码。 paper51.com

处理: paper51.com

l     校验字符的有效性。检查用户名是否满足输入的要求,即检查用户名和密码文本框是否为空,若为空,则提示用户输入用户名和密码。

copyright paper51.com

l     检验用户输入的口令与确认口令是否一致,如果一致则进行相应的口令处理。 copyright paper51.com

l     执行插入过程。 内容来自论文无忧网 www.paper51.com

l     返回登录框。 paper51.com

输出:注册成功或失败信息。 http://www.paper51.com

2)       此部分实现的关键类及方法说明

内容来自www.paper51.com

RegisterFrame.java文件中类RegisterFrame中的成员函数RegInfoInput()用于接收并校验注册信息的字符,然后引用包中的接口ProductKey中的成员函数DigestKey()默认口令处理方法来处理口令,生成此口令的一个消息摘要,然后连接数据库,执行插入数据库。

copyright paper51.com

6.    一次性口令注册窗口设置

paper51.com

1)       系统实现功能介绍 http://www.paper51.com

这部分主要完成用户的一次性口令注册功能,由RegisterFrame1.java文件里的代码实现,运行后的界面有用户名输入框、密码输入框、确认密码输入框、口令长度、口令个数及“确定”、“返回”两个按钮,其中单击各按钮进入相应的界面。

paper51.com

在此界面上注册一次性口令的操作流程及程序处理如下: paper51.com

输入:用户名、密码、确认密码。

内容来自www.paper51.com

处理: 内容来自论文无忧网 www.paper51.com

l     校验字符的有效性。检查用户输入的注册信息是否满足输入的要求,即检查用户名、口令文本框、口令长度、口令个数等是否为空,若为空,则提示用户输入。 copyright paper51.com

l     检验用户输入的口令与确认口令是否一致,如果一致则进行相应的口令处理。

http://www.paper51.com

l     执行插入过程。 http://www.paper51.com

l     打开口令生成对话框。 paper51.com

l     返回登录框。

内容来自www.paper51.com

输出:注册成功或失败信息。

copyright paper51.com

2)       此部分实现的关键类及方法说明

copyright paper51.com

RegisterFrame1.java文件中的类RegisterFrame1中的成员函数RegInfoInput()用于接收并校验注册用户输入的注册信息,然后引用包中的接口ProductKey,调用接口中的一次性口令处理方法DigestKey()来处理注册用户输入的初始口令,生成用户要求个数和长度的一系列相关联的口令,然后将最后一个生成的口令执行插入数据库。用类keyDialog向用户显示并保存生成的其它口令。

paper51.com

------分隔线----------------------------
联系方式