無紙化考試系統(tǒng)中的數(shù)據(jù)如何加密

所謂無紙化考試,就是以財(cái)政部印發(fā)的《從業(yè)資格考試大綱》為依據(jù)、以優(yōu)化的題庫資源為基礎(chǔ)、以現(xiàn)代信息技術(shù)為手段,通過隨機(jī)組卷生成無紙化考試試卷進(jìn)行考試,并及時(shí)生成考試成績,集考試報(bào)名、試卷生成、上機(jī)考試、閱卷、成績生成、合格證(單)打印等為一體的、多元化,新型的從業(yè)考試管理模式?;赪indows平臺的無紙化考試系統(tǒng)的安全性,我們將應(yīng)用于數(shù)據(jù)壓縮編碼等場合中的哈夫曼編碼算法,運(yùn)用于加密考試成績數(shù)據(jù)中,在該考試系統(tǒng)的實(shí)際運(yùn)作中,取得了很好的應(yīng)用效果。

一、哈夫曼編碼算法

1952年提出的哈夫曼編碼算法,是為壓縮文本文件所建立的,是一種統(tǒng)計(jì)編碼,也是一種可變字長編碼,該編碼完全依據(jù)數(shù)據(jù)單元的出現(xiàn)概率來構(gòu)造異字頭且平均長度最短的代碼字,其基本原理是頻繁使用的數(shù)據(jù)單元用較短的代碼代替,較少使用的數(shù)據(jù)單元用較長的代碼代替,每個(gè)數(shù)據(jù)單元的代碼各不相同,且一個(gè)代碼字不會與另一個(gè)代碼字的前幾位相同。編碼算法過程描述如下:

(1)首先統(tǒng)計(jì)出待編碼數(shù)據(jù)中所有相異數(shù)據(jù)單元(如文本文件中的字符)出現(xiàn)的頻率。

(2)將上進(jìn)頻率從左至右,按由小到大的順序送行排序,形成一個(gè)原始的頻率值集合。

(3)每一次在頻率值集合中選出兩個(gè)最小頻率值,將他們相加形成一個(gè)新的頻率值,并將該頻率值與剩下未選出的頻率值形成一個(gè)新的集合。

(4)重復(fù)(3)直到最后得到選出的兩個(gè)頻率值能和為1時(shí)結(jié)束。此時(shí),從數(shù)據(jù)結(jié)構(gòu)的角度來說,已徒到了一棵二叉樹,又稱之為哈夫曼樹。

(5)將(4)中形成的二叉樹(哈夫曼樹)左節(jié)點(diǎn)標(biāo)O右節(jié)點(diǎn)標(biāo)1(也可以全部反過來,或使用其它標(biāo)志值)。把從最上面的根節(jié)點(diǎn)到最下面的葉子節(jié)點(diǎn)途中遇到的0、1序列連接起來,就形成了相應(yīng)頻率值的數(shù)據(jù)單元的編碼(二進(jìn)制)。下列實(shí)例演示說明了上述過程。設(shè)(2)中得到的原始頻率值集合如表1所示。

依照上述算法,則可形成如圖1所示的二叉樹及相應(yīng)的二進(jìn)制編碼。

圖2顯示的是在形式上規(guī)范化后的二叉樹。

二、無紙化考試系統(tǒng)中數(shù)據(jù)加密處理方法

使用哈夫曼編碼對考試系統(tǒng)中成績數(shù)據(jù)進(jìn)行編碼處理,其核心是進(jìn)行加密,而不是進(jìn)行壓縮,所以在編碼過程中必須融入加密處理,且無須重點(diǎn)考慮壓縮效率。為使通用編碼算法具有很強(qiáng)的加密功能,我們在對數(shù)據(jù)進(jìn)行哈夫曼編碼過程中,設(shè)計(jì)了一些非常規(guī)的變異操作,獲得了很好的加密效果。

(1)在哈夫曼編碼過程的(5)中產(chǎn)生非二進(jìn)制編碼。

在哈夫曼編碼過程的(5)中,正常情況下,或考慮編碼的通用性時(shí),對二叉樹的左右節(jié)點(diǎn)均設(shè)置二進(jìn)制代碼O和1,這樣則得到二進(jìn)制形式的編碼字。如果不加以改造,則很容易被解碼。但是鑒于加密的考慮,將二叉樹的左右節(jié)點(diǎn)設(shè)置為八進(jìn)制十六進(jìn)制,或其它自己所定義的一種進(jìn)制,則可形成非常規(guī)的編碼字,因而被解碼的可能性就很小了,從而實(shí)現(xiàn)了加密要求。

(2)在哈夫曼編碼過程的(2)中,用1減去所在頻率值,得一系列新值,并形成頻率值集合。

在不考慮壓縮效率的前提下,用該方法獲得一個(gè)新的頻率值集合,在此集合的基礎(chǔ)上,形成哈夫曼編碼,采取通用的常規(guī)方法進(jìn)行解碼是不可能的。同時(shí)也可獲得很強(qiáng)的加密效果。

(3)在哈夫曼編碼過程的(1)中,任意或隨機(jī)選取若干個(gè)相異的數(shù)據(jù)單元,不進(jìn)行編碼。

選擇一些數(shù)據(jù)單元不進(jìn)行哈夫曼編碼,而且是任意或隨機(jī)選擇,這樣要解碼的話,則必須獲知沒有進(jìn)行編碼的數(shù)據(jù)單元,否則很難進(jìn)行解碼,也可達(dá)到很好的加密效果。

(4)對編碼過程所產(chǎn)生的二叉樹或編碼字?jǐn)?shù)據(jù)進(jìn)行處理。

哈夫曼解碼時(shí),必須獲知在編碼過程中所產(chǎn)生的二叉樹或編碼字的原始數(shù)據(jù)。常規(guī)情況下,編碼者對此兩類數(shù)據(jù)使用一般的文件進(jìn)行存儲,解碼時(shí)從文件中讀入數(shù)據(jù)即可。加密處理時(shí),可對此兩類數(shù)據(jù)的表示或存儲作一些變異操作,如在形成二叉樹時(shí),從程序設(shè)計(jì)的角度來說,可以用一種合有一些干擾性冗余數(shù)據(jù)的結(jié)構(gòu)體表示二叉樹。這樣就大幅度地增加了解碼的難度。

在實(shí)際的程序設(shè)計(jì)過程中,可綜合運(yùn)用4種方法,按照自己的應(yīng)用情況,設(shè)計(jì)具有高難度的加密程序,保護(hù)系統(tǒng)數(shù)據(jù)的安全性完整性,保證考試的公正與合理,使無紙化考試系統(tǒng)真正有實(shí)用價(jià)值。

三、哈夫曼編碼算法加密數(shù)據(jù)的優(yōu)點(diǎn)

本文提出在常規(guī)算法的基礎(chǔ)上,加上自己一些隨意設(shè)計(jì)的變異處理,可以形成加密性很強(qiáng)的方法。我們所設(shè)計(jì)的以分散形式進(jìn)行考試,以集中方式管理成績的軟件系統(tǒng)中,采用以上方法對成績數(shù)據(jù)進(jìn)行加密處理,加強(qiáng)了系統(tǒng)的兩大特點(diǎn):

(1)靈活多變的加密操作

本文所設(shè)計(jì)的考試系統(tǒng),實(shí)現(xiàn)了成績數(shù)據(jù)的集中處理,因此可以很方便地變換加密操作,甚至可以實(shí)現(xiàn)每次所使用的加密操作各不相同,而進(jìn)行成績數(shù)據(jù)集中處理的后臺程序無須變化。

(2)借助于哈夫曼編碼的壓縮特性

在加密的同時(shí),又完成了數(shù)據(jù)的壓縮,為成績數(shù)據(jù)集中管理過程中的數(shù)據(jù)轉(zhuǎn)移提供了良好的物理基礎(chǔ)。

小知識之哈夫曼樹

哈夫曼樹又稱最優(yōu)二叉樹,是一種帶權(quán)路徑長度最短的二叉樹。所謂樹的帶權(quán)路徑長度,就是樹中所有的葉結(jié)點(diǎn)的權(quán)值乘上其到根結(jié)點(diǎn)的路徑長度(若根結(jié)點(diǎn)為0層,葉結(jié)點(diǎn)到根結(jié)點(diǎn)的路徑長度為葉結(jié)點(diǎn)的層數(shù))。樹的帶權(quán)路徑長度記為WPL=(W1*L1+W2*L2+W3*L3+...+Wn*Ln),N個(gè)權(quán)值Wi(i=1,2,...n)構(gòu)成一棵有N個(gè)葉結(jié)點(diǎn)的二叉樹,相應(yīng)的葉結(jié)點(diǎn)的路徑長度為Li(i=1,2,...n)??梢宰C明哈夫曼樹的WPL是最小的。