在線考試系統(tǒng)中DES和AES加密算法的應(yīng)用

在在線考試系統(tǒng)中,當(dāng)客戶端提交生成試卷按鈕時,服務(wù)器會根據(jù)客戶端輸入的相關(guān)參數(shù)生成一份試卷,然后將試卷傳輸?shù)娇蛻舳?,供客戶端用戶使用。另外在網(wǎng)絡(luò)傳輸試卷過程中,很可能被非法用戶竊取,從而造成漏題,給正??荚噹砗艽蟮穆闊獜母旧辖鉀Q這一問題就是在傳輸之前對試卷信息進行加密,形成密文,再將密文傳回到客戶端加密算法,由客戶端的解密密鑰進行解密生成明文。由于系統(tǒng)的用戶名、密碼和試卷信息涉及到考試的保密性,因此在系統(tǒng)的試卷管理中,需要采用加密算法對試卷信息進行加密以提高試卷的保密性。

一、傳統(tǒng)加密算法的弊端

在我們傳統(tǒng)的印象里,對信息進行加密通??梢圆捎脤ΨQ加密算法,如DES加密算法、AES加密算法,但是由于對稱加密算法加密和解密都采用同樣的密鑰,密鑰在網(wǎng)絡(luò)中進行傳輸時容易被截獲,造成泄密。而RSA加密算法屬于非對稱加密算法有別于對稱加密算法,將密鑰一分二,公鑰公開,私鑰保密。公鑰通過網(wǎng)絡(luò)進行傳輸,而私鑰由生成者保留.它解決了密鑰管理的問題,但是卻又無法回避加密/解密效率低的問題。用戶名和密碼等敏感數(shù)據(jù)包含信息較少,用RSA加密算法進行加密解密低效的問題不是很突出,對速度沒有很大的影響,但是試卷的信息量比用戶名、密碼包含的信息量大得多,如果再單純使用RSA算法,速度會變得很慢,讓人無法忍受。為此,本文提出了應(yīng)用AES和RSA混合加密算法對在線考試系統(tǒng)中的試卷進行加密,以解決試卷傳輸過程中安全性要求。

二、AES和RSA加密算法在考試系統(tǒng)中的應(yīng)用

在線考試系統(tǒng),要想在保證安全的同時,又能解決低效的問題,僅靠對稱密鑰算法中或者非對稱密鑰算法的一種是不可行的.對稱加密算法只有一個密鑰,在傳輸過程中密鑰很容易被截獲,如果對密鑰進行加密,使攻擊者即使截獲到數(shù)據(jù)后也無法破解,就可以達到保證安全的目的.而非對稱加密算法的公鑰可以公開,用它對數(shù)據(jù)進行加密,沒有私鑰就無法破解數(shù)據(jù)。因此,我們采用將兩者相結(jié)合的方法對試卷進行加密,即可以先用對稱加密算法對試卷進行加密,然后再用非對稱加密算法對對稱加密算法的密鑰進行加密解密。

在對稱加密算法中,安全性和性能都比較優(yōu)秀的是AES算法.AES可以很有效地抵御所有針對DES算法的攻擊方法,而且它還具有密鑰建立時間短、靈敏性好、內(nèi)存需求低的優(yōu)點,因此它在各個領(lǐng)域都得到廣泛的應(yīng)用。但是在JAVA中使用AES加密算法需要注意的是默認的AES密鑰只能是128位。這是由于出口限制的問題,導(dǎo)致國內(nèi)不能使用192位或256位的密鑰,因此,在JAVA6中AES的密鑰長度如果要設(shè)為192位或256位,一種方法是使用Bouncy Castle加密組件,另一種方法無需第三方組件,直接在JRE環(huán)境中運行,但是必須從SUN官方網(wǎng)站下載無政策限制權(quán)限文件,下載得到的文件名為jce_policy -6.zip,里面包含四個文件(README.text、COPYRIGHT. html、local_policy.jar和US_export_policy. jar).切換到%JDK_Home% \jre \lib\security目錄下,對應(yīng)覆蓋local_policy. jar和US_export_policy. jar兩個文件。同時,在%JRE_Home% \JRE_Home%\lib\security目錄下,也對應(yīng)覆蓋這兩個文件。完成這些步驟后,AES的密鑰長度就可以達到192位或256位。

在對試卷進行混合加密時,不管是組卷還是出卷,都應(yīng)該在服務(wù)器端和客戶端建立RSA和AES算法程序。首先建立RSA和AES的JavaBean,分別為rsa. java和aes. java,這兩個JavaBean是在服務(wù)器中進行調(diào)用,但在客戶端卻無法使用這兩個JavaBean。因此在客戶端,還必須定義能在客戶端調(diào)用的實現(xiàn)RSA算法和AES算法的程序,這可以用JavaScript來實現(xiàn),這兩個算法文件名為rsa. js和aes. js,aes.js.文件中的代碼參考http t//www. movable—type. co. uk/scripts/aes. html,rsa. js文件中的代碼可參考http://www.ohdave.com/rsa/。

由于在線考試系統(tǒng)包含組卷和取卷功能,而這兩個功能都涉及到試卷傳輸過程中的安全性問題,因此下面從這兩個方面說明。

1、組卷流程

 

(1)在調(diào)用組卷申請頁面時,首先會在服務(wù)器端調(diào)用rsa. java,生成公鑰和私鑰,并保存起來.關(guān)鍵代碼如下:

Map<String,Object>keyMap=、RSA. init-Key();

publicKey=RSA. getPublicKey(key-Map);//公鑰

privateKey=RSA. getPrivateKey(key-Map);//私鑰

生成公鑰后,將公鑰保存在session對象中。

Session.setAttribute(.“pk”,publicKey)。

(2)在客戶端,客戶根據(jù)組卷的參數(shù)進行組卷,在點擊生成時,調(diào)用aes. JS對試卷內(nèi)容進行AES加密,同時調(diào)用rsa.js對AES的密鑰進行RSA加密,然后將加密后的試卷以及加密后AES密鑰一起發(fā)送到服務(wù)器。

(3)服務(wù)器收到后,首先調(diào)用RSA類,對已加密的AES密鑰用私鑰進行解密,得到AES密鑰,再調(diào)用AES類對加密的試卷進行解密,得到試卷明文后再進行保存。

2、取卷流程

 

(1)當(dāng)保持試卷時,客戶端在向服務(wù)器端發(fā)送請求試卷的頁面后,調(diào)用rsa.js生成RSA的公鑰和私鑰,然后把私鑰保存起來,并將公鑰發(fā)送給服務(wù)器端。

(2)服務(wù)器端收到請求試卷頁面后,根據(jù)相關(guān)查詢參數(shù)從數(shù)據(jù)庫中取出試卷,并調(diào)用AES類對試卷進行加密得到試卷密文和AES密鑰。然后再調(diào)用RSA類用客戶端發(fā)來的公鑰對AES密鑰進行RSA加密,然后再將加密后的AES密鑰及試卷密文發(fā)送到客戶端。

(3)客戶端收到AES密鑰密文和試卷密文后,調(diào)用rsa.JS,利用原先保存的私鑰對AES密鑰密文進行解密,得到AES密鑰后,再調(diào)用aes. js對試卷密文進行解密從而得到試卷明文,然后顯示
在瀏覽器中。

這種基于AES和RSA相結(jié)合的加密算法不僅使用于考試系統(tǒng),也適用于其他的B/S系統(tǒng),這種加密方法對數(shù)據(jù)進行加密解密,既可解決數(shù)據(jù)安全性的問題,也能解決加密解密時性能低下的問題。

小知識之B/S系統(tǒng)B/S系統(tǒng)(Browser/Server,瀏覽器/服務(wù)器模式):是WEB興起后的一種網(wǎng)絡(luò)結(jié)構(gòu)模式,WEB瀏覽器是客戶端最主要的應(yīng)用軟件。這種模式統(tǒng)一了客戶端,將系統(tǒng)功能實現(xiàn)的核心部分集中到服務(wù)器上,簡化了系統(tǒng)的開發(fā)、維護和使用。