在在线考试系统中,当客户端提交生成试卷按钮时,服务器会根据客户端输入的相关参数生成一份试卷,然后将试卷传输到客户端,供客户端用户使用。另外在网络传输试卷过程中,很可能被非法用户窃取,从而造成漏题,给正常考试带来很大的麻烦,要从根本上解决这一问题就是在传输之前对试卷信息进行加密,形成密文,再将密文传回到客户端加密算法,由客户端的解密密钥进行解密生成明文。由于系统的用户名、密码和试卷信息涉及到考试的保密性,因此在系统的试卷管理中,需要采用加密算法对试卷信息进行加密以提高试卷的保密性。
一、传统加密算法的弊端
在我们传统的印象里,对信息进行加密通常可以采用对称加密算法,如DES加密算法、AES加密算法,但是由于对称加密算法加密和解密都采用同样的密钥,密钥在网络中进行传输时容易被截获,造成泄密。而RSA加密算法属于非对称加密算法有别于对称加密算法,将密钥一分二,公钥公开,私钥保密。公钥通过网络进行传输,而私钥由生成者保留.它解决了密钥管理的问题,但是却又无法回避加密/解密效率低的问题。用户名和密码等敏感数据包含信息较少,用RSA加密算法进行加密解密低效的问题不是很突出,对速度没有很大的影响,但是试卷的信息量比用户名、密码包含的信息量大得多,如果再单纯使用RSA算法,速度会变得很慢,让人无法忍受。为此,本文提出了应用AES和RSA混合加密算法对在线考试系统中的试卷进行加密,以解决试卷传输过程中安全性要求。
二、AES和RSA加密算法在考试系统中的应用
在线考试系统,要想在保证安全的同时,又能解决低效的问题,仅靠对称密钥算法中或者非对称密钥算法的一种是不可行的.对称加密算法只有一个密钥,在传输过程中密钥很容易被截获,如果对密钥进行加密,使攻击者即使截获到数据后也无法破解,就可以达到保证安全的目的.而非对称加密算法的公钥可以公开,用它对数据进行加密,没有私钥就无法破解数据。因此,我们采用将两者相结合的方法对试卷进行加密,即可以先用对称加密算法对试卷进行加密,然后再用非对称加密算法对对称加密算法的密钥进行加密解密。
在对称加密算法中,安全性和性能都比较优秀的是AES算法.AES可以很有效地抵御所有针对DES算法的攻击方法,而且它还具有密钥建立时间短、灵敏性好、内存需求低的优点,因此它在各个领域都得到广泛的应用。但是在JAVA中使用AES加密算法需要注意的是默认的AES密钥只能是128位。这是由于出口限制的问题,导致国内不能使用192位或256位的密钥,因此,在JAVA6中AES的密钥长度如果要设为192位或256位,一种方法是使用Bouncy Castle加密组件,另一种方法无需第三方组件,直接在JRE环境中运行,但是必须从SUN官方网站下载无政策限制权限文件,下载得到的文件名为jce_policy -6.zip,里面包含四个文件(README.text、COPYRIGHT. html、local_policy.jar和US_export_policy. jar).切换到%JDK_Home% \jre \lib\security目录下,对应覆盖local_policy. jar和US_export_policy. jar两个文件。同时,在%JRE_Home% \JRE_Home%\lib\security目录下,也对应覆盖这两个文件。完成这些步骤后,AES的密钥长度就可以达到192位或256位。
在对试卷进行混合加密时,不管是组卷还是出卷,都应该在服务器端和客户端建立RSA和AES算法程序。首先建立RSA和AES的JavaBean,分别为rsa. java和aes. java,这两个JavaBean是在服务器中进行调用,但在客户端却无法使用这两个JavaBean。因此在客户端,还必须定义能在客户端调用的实现RSA算法和AES算法的程序,这可以用JavaScript来实现,这两个算法文件名为rsa. js和aes. js,aes.js.文件中的代码参考http t//www. movable—type. co. uk/scripts/aes. html,rsa. js文件中的代码可参考http://www.ohdave.com/rsa/。
由于在线考试系统包含组卷和取卷功能,而这两个功能都涉及到试卷传输过程中的安全性问题,因此下面从这两个方面说明。
1、组卷流程
(1)在调用组卷申请页面时,首先会在服务器端调用rsa. java,生成公钥和私钥,并保存起来.关键代码如下:
Map<String,Object>keyMap=、RSA. init-Key();
publicKey=RSA. getPublicKey(key-Map);//公钥
privateKey=RSA. getPrivateKey(key-Map);//私钥
生成公钥后,将公钥保存在session对象中。
Session.setAttribute(.“pk”,publicKey)。
(2)在客户端,客户根据组卷的参数进行组卷,在点击生成时,调用aes. JS对试卷内容进行AES加密,同时调用rsa.js对AES的密钥进行RSA加密,然后将加密后的试卷以及加密后AES密钥一起发送到服务器。
(3)服务器收到后,首先调用RSA类,对已加密的AES密钥用私钥进行解密,得到AES密钥,再调用AES类对加密的试卷进行解密,得到试卷明文后再进行保存。
2、取卷流程
(1)当保持试卷时,客户端在向服务器端发送请求试卷的页面后,调用rsa.js生成RSA的公钥和私钥,然后把私钥保存起来,并将公钥发送给服务器端。
(2)服务器端收到请求试卷页面后,根据相关查询参数从数据库中取出试卷,并调用AES类对试卷进行加密得到试卷密文和AES密钥。然后再调用RSA类用客户端发来的公钥对AES密钥进行RSA加密,然后再将加密后的AES密钥及试卷密文发送到客户端。
(3)客户端收到AES密钥密文和试卷密文后,调用rsa.JS,利用原先保存的私钥对AES密钥密文进行解密,得到AES密钥后,再调用aes. js对试卷密文进行解密从而得到试卷明文,然后显示
在浏览器中。
这种基于AES和RSA相结合的加密算法不仅使用于考试系统,也适用于其他的B/S系统,这种加密方法对数据进行加密解密,既可解决数据安全性的问题,也能解决加密解密时性能低下的问题。
小知识之B/S系统B/S系统(Browser/Server,浏览器/服务器模式):是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。