VFP數(shù)據(jù)庫(kù)加密技術(shù)簡(jiǎn)析

隨著互聯(lián)網(wǎng)的高速發(fā)展,數(shù)據(jù)庫(kù)的應(yīng)用越來(lái)越廣泛,為防止數(shù)據(jù)庫(kù)被非法瀏覽、修改、破壞,有必要對(duì)數(shù)據(jù)庫(kù)中存儲(chǔ)的重要數(shù)據(jù)進(jìn)行加密處理,以實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)的安全。下面我們就以VFP數(shù)據(jù)環(huán)境為例,給大家講講VFP數(shù)據(jù)庫(kù)的術(shù)。

按照數(shù)據(jù)庫(kù)的結(jié)構(gòu)層次,VFP數(shù)據(jù)庫(kù)系統(tǒng)中常用的加密方法依照加密粒度的不同可分為記錄級(jí)(字段級(jí))、表級(jí)和數(shù)據(jù)項(xiàng)級(jí)。

一、記錄級(jí)(行級(jí))或字段級(jí)(列級(jí))加密

如果以記錄為單位進(jìn)行加密, 那么每讀寫(xiě)一條記錄只需進(jìn)行一次加解密的操作, 對(duì)于不需要訪(fǎng)問(wèn)到的記錄,不作進(jìn)行任何操作?;谟涗浀募用芗夹g(shù)是最常用的數(shù)據(jù)庫(kù)加密手段。這種方案的基本思路是:在各自密鑰的作用下,將數(shù)據(jù)庫(kù)的每一個(gè)記錄加密成密文并存放于數(shù)據(jù)庫(kù)文件中;記錄的查找是通過(guò)需查找的值加密成密文后進(jìn)行的,由于密文數(shù)據(jù)一般不能代替明文進(jìn)行算術(shù)運(yùn)算和關(guān)系運(yùn)算, 因此采用此方案時(shí), 數(shù)據(jù)庫(kù)不能實(shí)現(xiàn)索引,連接,排序等多種操作, 并會(huì)影響數(shù)據(jù)庫(kù)管理系統(tǒng)某些原有功能的作用。

以字段為單位的加密分析與以記錄為單位的加密情況相似,字段級(jí)加密的數(shù)據(jù)以偽碼方式存放在字段中,可以采用多隨機(jī)數(shù)加密的方法,對(duì)于原碼的每字符的ASCII值,都產(chǎn)生一個(gè)隨機(jī)數(shù)(即密鑰)與之運(yùn)算,生成另外一個(gè)0-255之間的數(shù),然后再將它們以3個(gè)字符方式與密鑰合并成4個(gè)字符生成偽碼,最后將全部字符生成的這樣的偽碼聯(lián)結(jié)起來(lái)形成對(duì)應(yīng)的密數(shù)字序列。當(dāng)打開(kāi)表的時(shí)候,用加密函數(shù)將原碼轉(zhuǎn)換成偽碼進(jìn)行保存,從表中無(wú)法直接看到原碼,只有程序才能動(dòng)態(tài)看到原碼,保密性很強(qiáng)。解密時(shí)則采用相反的方法,每個(gè)字符都要與這個(gè)字符有關(guān)的隨機(jī)數(shù)運(yùn)算,由于需用到多個(gè)隨機(jī)密鑰,安全系數(shù)有較大提高,以下是加密函數(shù):

Function encrypt()

para bb

use pass

appe blan

R=int(rand(-10)*1000)

L=len(bb)

abc=right(str(R)+iif(L>9,str(L,2),"0"+str(L,1)),4)

R=int(rand()*10)

for i=1 to len(bb)

k=asc(subs(bb,i,1))-R

kk=iif(k>99,str(k,3),"0"+str(k,2))

abc=abc+str(R,1)+kk

R=int(rand()*10)

endfor

repl aa with abc

return abc

二、表級(jí)加密

(1)用隨機(jī)偽碼的方法實(shí)現(xiàn)對(duì)數(shù)據(jù)表的加密

加密函數(shù)的思想是對(duì)用戶(hù)密碼(真碼)進(jìn)行復(fù)雜化、隱蔽化處理,也就是將真碼隱藏在多位偽碼中,特點(diǎn)是實(shí)現(xiàn)簡(jiǎn)單,加密可靠,不易破解??蓪⒁粋€(gè)1至7位的用戶(hù)密碼轉(zhuǎn)換為20位的隨機(jī)偽碼,且每次重新設(shè)定密碼時(shí)所產(chǎn)生的偽碼都不相同,通過(guò)變換生成的20位偽碼沒(méi)有任何規(guī)律性,即使從數(shù)據(jù)表中擦除偽碼也無(wú)法進(jìn)入系統(tǒng),從而實(shí)現(xiàn)了可靠的密碼權(quán)限控制。加密函數(shù)部分內(nèi)容如下:

Para ma

N1=rand()*10^9

if N1<=999999999

N1=N1+10^9

endif

N1=int(N1)

Cl=str(N1+ma)+str(N1)

C2=subs(C1,5,20)+subs(C1,l,4)

Pl=””

P2=””

For i=1 TO 10

P1=P1+subs(C2,2*i-l,1)

P2=P2+subs(CZ,2*i,1)

Endfor

Wma=p1+p2

Retu wma

若真碼為: abcdef,則偽碼為: 14313143139318393183,無(wú)論真是一位還是相同多位,偽碼總是具有同樣的不確定性和復(fù)雜性,所以若想通過(guò)簡(jiǎn)化真碼來(lái)分析偽碼是不可能的。

(2)用VFP提供的低級(jí)文件函數(shù)實(shí)現(xiàn)對(duì)數(shù)據(jù)表的加密

該方法的實(shí)現(xiàn)原理為:先用低級(jí)文件函數(shù)自定義一個(gè)文件頭,其中可包含:文件頭長(zhǎng)度、字段名、字段類(lèi)型、字段長(zhǎng)度、每條記錄長(zhǎng)度、密鑰等,接著將記錄按文件頭規(guī)定的格式加密后利用低級(jí)文件函數(shù)fwrite()順序?qū)懭胛募?。使用時(shí),用低級(jí)文件函數(shù)fread()從自定義的文件中讀取文件頭的內(nèi)容,用CreateCurso - SQL到新建的數(shù)據(jù)表中,讀取記錄后先解密,再用Insert - SQL到剛建的數(shù)據(jù)表中,然后就可正常使用了。

三、數(shù)據(jù)項(xiàng)級(jí)(字段值級(jí))加密

由于數(shù)據(jù)元素是數(shù)據(jù)庫(kù)內(nèi)加密的最小單位,每個(gè)被加密的元素產(chǎn)生一個(gè)相應(yīng)的密鑰,加密的對(duì)象是記錄中的某個(gè)字段值,它是數(shù)據(jù)庫(kù)加密的最小單位。其優(yōu)點(diǎn)是具有較高的安全性,較好的靈活性和適應(yīng)性。缺點(diǎn)是加/解密效率低,如果各個(gè)數(shù)據(jù)項(xiàng)分別用不同的密鑰加密,則密鑰個(gè)數(shù)=記錄個(gè)數(shù)×字段個(gè)數(shù),其數(shù)量巨大,管理困難。如要對(duì)字段mpassword M(4)進(jìn)行加密(類(lèi)型設(shè)置成備注型或字符型),假設(shè)密碼長(zhǎng)度規(guī)定為8, 內(nèi)容為abcdefgh,編寫(xiě)程序如下:

lpassw='abcdefgh'

lpasswlen=8

mpassw=''

for ln=1 to lpasswlen

mpassw=mpassw+chr(abs(100-asc(subs(lpassw,ln,1))))

endfor

?mpassw

VFP數(shù)據(jù)庫(kù)加密技術(shù)的應(yīng)用極大地解決了VFP中數(shù)據(jù)的安全問(wèn)題, 在應(yīng)用中應(yīng)根據(jù)不同的要求,選擇合適的加密方法。

小知識(shí)之VFP數(shù)據(jù)庫(kù):

VFP是Microsoft公司推出的最新可視化數(shù)據(jù)庫(kù)管理系統(tǒng)平臺(tái),是功能特別強(qiáng)大的32位數(shù)據(jù)庫(kù)管理系統(tǒng)。它提供了功能完備的工具、極其友鄧的用戶(hù)界面、簡(jiǎn)單的數(shù)據(jù)存取方式、獨(dú)一無(wú)二的跨平臺(tái)技術(shù),交肯有良好的兼容性、真正的可編譯性和較強(qiáng)的安全性,是目前最快的捷、最實(shí)用的數(shù)據(jù)庫(kù)管理系統(tǒng)軟件之一。