朱明秀
(廣西工商職業(yè)技術(shù)學(xué)院 電子信息系,南寧 530003)
隨著計算機技術(shù)的飛速發(fā)展,數(shù)據(jù)庫的應(yīng)用越來越廣泛地深入到政府機關(guān)、企業(yè)單位、媒體學(xué)校等領(lǐng)域,同時各種應(yīng)用系統(tǒng)數(shù)據(jù)庫中大量數(shù)據(jù)的信息安全問題也越來越引起人們的重視。為防止數(shù)據(jù)庫被非法瀏覽、修改、破壞,有必要對數(shù)據(jù)庫中存儲的重要數(shù)據(jù)進(jìn)行加密處理,以實現(xiàn)數(shù)據(jù)存儲的安全。本文結(jié)合VFP 數(shù)據(jù)庫環(huán)境闡述了一些基于數(shù)據(jù)庫的加密算法, 而且對采取混沌加密算法給出了具體實現(xiàn)。
數(shù)據(jù)加密就是把數(shù)據(jù)信息轉(zhuǎn)換為不可辨識的形式過程,目的是使非法人員不能夠識別。在VFP開發(fā)的數(shù)據(jù)庫系統(tǒng),數(shù)據(jù)庫的安全性、保密性是設(shè)計者必須考慮的重要問題。最常用的方法是給數(shù)據(jù)庫管理系統(tǒng)加上密碼,在進(jìn)入系統(tǒng)時根據(jù)不同的用戶輸入一個字符串口令。
目前, 設(shè)置這種口令的方法各式各樣, 最簡單的方法就是將口令密碼以固定的形式寫入程序中,只有密碼正確后才能進(jìn)入系統(tǒng)。另外一種方法是將操作者輸入的密碼通過簡單的運算(如移位、異或等可逆運算) ,轉(zhuǎn)換為加密后的偽碼存儲在數(shù)據(jù)庫中。盡管這種加密方法的保密性沒有隨機加密算法好, 但由于其簡潔、快速、實用,因而比較適合用于需要保密但保密要求又不是特別高的系統(tǒng)之中。還有一種方法是將操作者輸入的密碼通過隨機加密算法形成隨機偽碼存放在數(shù)據(jù)庫中。這種方法在一定程度上克服了上兩種加密算法存在的不足,但由于隨機數(shù)的產(chǎn)生并不能真正做到完全隨機,仍難以達(dá)到良好保密的要求。本文就結(jié)合VFP開發(fā)中數(shù)據(jù)庫的加密方法進(jìn)行分析和研究。
將密碼進(jìn)行簡化的加密,但密碼仍是固定不變的。實現(xiàn)方法是把密碼和操作員姓名存入到一個數(shù)據(jù)庫中,進(jìn)入系統(tǒng)程序時提示用戶輸入密碼和操作員姓名,系統(tǒng)必須與數(shù)據(jù)庫中的密碼和操作員姓名進(jìn)行驗證。下面是此方法的核心語句:
do while I<3
set cons off
@ 10,30 say “請輸入密碼:”
accept to kl
set cons on
if trim(mkl)=trim(kl)
此方法比較繁瑣,數(shù)據(jù)庫容易被非法瀏覽、修改、破壞,保密性和靈活性相當(dāng)差,且不能滿足系統(tǒng)對多用戶的要求。但也可以采用函數(shù)CHR()來換算密碼ASCII碼, 經(jīng)過密碼的運算,密碼發(fā)生改變,產(chǎn)生密碼無法讓操作者直接識別。一般采用加密語句如:PSD=CHR(65)+CHR(66)+“9”。
加密原理是:先用低級文件函數(shù)自定義一個文件頭,其中可包含:文件頭長度、字段名、字段類型、字段長度、每條記錄長度、密鑰等,然后將記錄按文件頭規(guī)定的格式加密后,通過低級文件函數(shù)fwrite()順序?qū)懭胛募?。調(diào)用時,再用低級文件函數(shù)fread()從自定義的文件中讀取文件頭的內(nèi)容。用VFP提供的低級文件函數(shù)對數(shù)據(jù)庫中的表文件(.dbf)進(jìn)行加密,加密后的文件無法打開、瀏覽,從而起到保密數(shù)據(jù)的作用。使用時,再執(zhí)行相應(yīng)解密程序即可將加密的表還原。
例如表文件czr.dbf,記錄內(nèi)容為進(jìn)入某系統(tǒng)時合法的用戶名和口令,下面的代碼即是對其進(jìn)行加密過程。
混沌是指確定性系統(tǒng)中出現(xiàn)的類似隨機的過程,它不同于一般的隨機性,是普遍存在的復(fù)雜的又有驚人的有序?;煦缡侨藗冊趯δ承┓蔷€性動態(tài)系統(tǒng)的研究中發(fā)現(xiàn)的, 結(jié)構(gòu)復(fù)雜,難以分析和預(yù)測,但可以提供具有良好的隨機性、相關(guān)性、復(fù)雜性的偽隨機序列。初始狀態(tài)只有微小差別的兩個混沌系統(tǒng)在較短的時間后就會產(chǎn)生兩組完全不同的、互不相關(guān)的混沌序列值。則利用這樣的序列就可以進(jìn)行加密。
混沌序列加密屬于序列密碼加密,其加密原理與序列密碼加密原理相似, 不同在于一般的序列密碼是利用移位寄存器為基礎(chǔ)的電路來產(chǎn)生偽隨機序列作為密鑰序列,而混沌序列加密是利用混沌系統(tǒng)迭代產(chǎn)生混沌序列作為密鑰序列?;煦缧蛄忻艽a加密方法靈活多變,可以充分利用混沌信號的特性構(gòu)造復(fù)雜的加密函數(shù)。
建立一個數(shù)據(jù)表(czy.dbf)包括四個字段分別是:操作員(類型是字符型、寬度為8);密碼(類型是字符型、寬度為8);qx是操作員權(quán)限(類型是數(shù)值型、寬度為8、小數(shù)位數(shù)為0);mm是存放操作員真實密碼(類型是字符型、寬度為8)。加密的設(shè)計思路是:首先讀取操作員姓名,并記錄長度獲得循環(huán)次數(shù),通過LEN()、SUBSTR()、ASC()、ALLTRIM()函數(shù)將操作員第一字符轉(zhuǎn)換成十進(jìn)制ASCⅡ代碼。然后以Logistic映射進(jìn)行隨機加密,最后將密文寫入文件。下面是主要代碼流程圖,如圖1所示。
圖1 混沌加密算法的流程圖
3.3.1 Logistic 映射的性質(zhì)
Logistic映射是最典型的,也是研究的最廣泛的動力系統(tǒng),其定義如下:
Xn + 1 =λXn (1-Xn) Xn ∈[0 ,1 ]
其中:0≤λ≤4。混沌動力學(xué)的研究表明,當(dāng)λ大于3.569945672,小于等于4時,Logistic映射處于混沌狀態(tài),即產(chǎn)生的序列{Xn;n=0 ,1 ,2 ,3 …}是非周期的,不收斂的,且對初始值非常敏感。當(dāng)λ=4時,該映射是滿射,產(chǎn)生的混沌序列在區(qū)間(0,1)上具有遍歷性。
3.3.2 在VFP數(shù)據(jù)庫實現(xiàn)
從系統(tǒng)的安全性出發(fā),本文只對數(shù)據(jù)表中的密碼字段做加密處理,且不同的操作權(quán)限應(yīng)使用不同的密鑰,即使一般用戶通過VFP打開數(shù)據(jù)庫,也不能“看到”或無法修改操作員密碼。下面是此算法的主要語句:
使用混沌加密算法進(jìn)行加密的用戶文件及其結(jié)果分別如圖2和圖3所示。比較兩圖可以看出,相同的字符使用該算法加密后會顯示不同的密文字符。這種加密的密鑰是一次一密的,故而是動態(tài)的。因此加密算法是比較安全的,可以滿足VFP數(shù)據(jù)庫應(yīng)用系統(tǒng)保密的要求。
圖2 未加密的用戶數(shù)據(jù)表
圖3 加密的用戶數(shù)據(jù)表
[1] 翁正科.潘廣和.FOXPRO應(yīng)用程序300例[M].北京:清華大學(xué)出版社,1995:208-212.
[2] 許芳芳.基于混沌加密算法的VFP文件加密[J].福建電腦,2008:85-87.
[3] 張憲君.在VF中如何給文件加密[J].科技咨詢導(dǎo)報,2007,40.