利用數(shù)據(jù)加密技術(shù)如何設(shè)計加密的vfp表單

對數(shù)據(jù)庫管理軟件而言,軟件的安全性、數(shù)據(jù)的保密性是用戶較為關(guān)注的的問題。采用何種技術(shù)來有效防止無關(guān)人員瀏覽數(shù)據(jù)、非法修改數(shù)據(jù)等,是設(shè)計人員在具體軟件設(shè)計中應(yīng)給予關(guān)注的問題。那么如何才能保障vfp表單的安全呢?接下來,我就給大家講一下利用數(shù)據(jù)文件加密技術(shù)來如何設(shè)計加密的vfp表單。

一、用戶注冊表單設(shè)計思路

表單運行時,能根據(jù)選擇的用戶名,輸入的密碼,判定該用戶是否為超級用戶(即系統(tǒng)管理員)、則可以進(jìn)行添加用戶、修改密碼和刪除用戶等操作。如果不是超級用戶,但有較高的權(quán)限,則可以自己修改密碼,不能修改他人密碼,也不能添加和刪除用戶。對于權(quán)限較低的用戶,則提示無權(quán)添加、修改和刪除用戶。

二、設(shè)計系統(tǒng)用戶數(shù)據(jù)表

為了實現(xiàn)系統(tǒng)各用戶都有各自的密碼和權(quán)限功能,需要在數(shù)據(jù)庫系統(tǒng)中設(shè)計一個用于保存系統(tǒng)用戶信息的數(shù)據(jù)表,本文設(shè)為operator.dbf表,其包含四個字段:用戶名(xm _C(10)),密碼(mm C(6)),權(quán)限(qx C(1)),超級用戶(cjyfL(1)) 。

三、表單設(shè)計過程

1、新建表單,添加控件

新建一用戶注冊表單如圖所示,主要控件有:7個標(biāo)簽(Label))、一個組合框(combo1)、四個文本框(Text)、一個選項按鈕組(optiongroup1)、五個命令按鈕(command)等,并在表單的數(shù)據(jù)環(huán)境中添加數(shù)據(jù)表(Operator)。

利用數(shù)據(jù)加密技術(shù)如何設(shè)計加密的vfp表單

2、設(shè)置控件的有關(guān)事件

(1)在表單的Activate事件中添加如下代碼:

public czycs,mmzw,yfqxcs,cjyfcs _ &&定義有關(guān)變量:

mmzw=0
select operator

if recc()=0

czycs=chr(87+asc(space(1)))+chr(75+asc(space(1)))+chr(54+asc(space(1)))+;

chr(48+asc(space(1)))+chr(82+asc(space(1)))+chr(23+asc(space(1)))

yfqxcs=chr(40+asc(A))

insert into operator values(管理員,czycs,.T.,yfqxcs)

endif

thisform.combo1.value=alltrim(xm) _&&_給控件賦值

設(shè)置以上代碼的意義:當(dāng)表單加載時先檢查operator表中是否存在用戶記錄,如果不存在就添加一各用戶名為“管理員”、密碼”空”、用戶權(quán)限為“A”、超級用戶的記錄,并將空密碼及用戶權(quán)限“A”加密后插入到operator表中,來作為初始系統(tǒng)用戶密碼,以便系統(tǒng)管理員能通過該表單進(jìn)行修改和添加用戶。

加密方法是:Asc()函數(shù)將6個空格和字母“A”轉(zhuǎn)為ASCⅡ碼,并加上相應(yīng)值(如代碼中的87、75、54…),再通過Chr()函數(shù)轉(zhuǎn)化為字符,最后將各加密的字符連接以完成對用戶密碼和權(quán)限的加密過程。

(2)在表單中新建一加密方法程序(Yfmm):

czycs=chr(87+asc(substr(thisform.text2.value,1,1)));

+chr(75+asc(substr(thisform.text2.value,2,1)));

+chr(54+asc(substr(thisform.text2.value,3,1)));

&&對密碼進(jìn)行加密處理

+chr(48+asc(substr(thisform.text2.value,4,1)));

+chr(82+asc(substr(thisform.text2.value,5,1)));

+chr(23+asc(substr(thisform.text2.value,6,1)))

yfqxcs=chr(40+asc(upper(thisform.text4.value)))

&&對權(quán)限權(quán)限加密處理

if thisform.optiongroup1.option1.value=1

&&判斷是否為超級用戶cjyfcs=.T.

&&超級用戶?else??cjyfcs=.F.

&&非超級用戶

end if

以上代碼的含義是:將用戶輸入到文框(Text2)中的字符串(6個字符,即密碼,可以是字母或數(shù)字),通過Substr()函數(shù)和Asc()函數(shù)中的各字符逐一轉(zhuǎn)為ASCⅡ碼,并加上相應(yīng)值,再通過Chr()函數(shù)轉(zhuǎn)化為字符,最后將各加密的字符連接以完成對用戶密碼的加密過程。對用戶權(quán)限,先通過Upper()函數(shù)將用戶輸入的字符(即:權(quán)限,一個英語字母)轉(zhuǎn)化為大寫字母,再將其轉(zhuǎn)為ASCⅡ碼碼,并加上相應(yīng)值,然后通過Chr()函數(shù)轉(zhuǎn)化為字符。

從上述可以看出,加密方法采用的是二次加密技術(shù)。它是目前較為流行的一種數(shù)據(jù)加密技術(shù)。能有效防止密碼被輕易識別或非法用戶破解,從而提高了密碼安全性。

(2)確定按鈕(Command1)的Click事件中添加如下代碼:

do case case this.caption=確定 &&如果Command1標(biāo)題文本為“確定”

thisform.yfmm &&執(zhí)行加密方法,對用戶輸入的密碼加密處理 select operator locate for mm=czycs and alltrim(xm)=;

alltrim(thisform.combo1.value) &&在數(shù)據(jù)表中搜索與輸入相同的操作員密碼和姓名 if found() &&如果找到

yfqxcs=chr(asc(qx)-40) &&對用戶權(quán)限解密處理 do case

case cjyf=.T. and yfqxcs=A &&如果為超級用戶就將添加、修改、刪除按鈕激活 this.caption=返回 &&將Command1標(biāo)題文本改為“返回” thisform.command2.enabled=.T. thisform.command3.enabled=.T.

thisform.command4.enabled=.T. &&激活添加、修改和刪除按鈕

case yfqxcs=A or yfqxcs=B &&如果為A、B類用戶但不是超級用戶,則將修改按鈕激活

this.caption=返回 &&將Command1標(biāo)題文本改為“返回”thisform.command3.enabled=.T.otherwise

=messagebox(你的權(quán)限不夠,無權(quán)修改密碼或添加用戶!,48,密碼錯誤)

endcase else=messagebox(密碼輸入不正確!請重輸!,48,密碼錯誤)

mmzw=mmzw+1&&統(tǒng)計密碼輸入錯誤的次數(shù) if mmzw<3 &&如果小于3次,可重輸入else=messagebox(對不起,你不是本系統(tǒng)用戶你無權(quán)修改或添加用戶!,48,密碼錯誤)

thisform.release &&退出表單

endif

endif

case this.caption=返回&&如果Command1標(biāo)題文本為“返回”

this.caption=確定&&將Command1標(biāo)題文本改為“確定”

thisform.command2.enabled=.f.&&將添加、修改、刪除按鈕置為失效并修改標(biāo)題名稱

thisform.command3.enabled=.f.thisform.command4.enabled=.f.thisform.command2.caption=添加

thisform.command3.caption=修改

thisform.command4.caption=刪除

thisform.text2.visible=.T.

thisform.label3.visible=.T.

endcase

上述代碼主要實現(xiàn)的功能為:能根據(jù)按鈕的標(biāo)題文本來決定進(jìn)行何種操作。

如果為“確定”:將標(biāo)題文本改為“返回”,然后檢測輸入密碼正確與否,如果密碼正確就判斷是否為“超級用戶”和權(quán)限為“A”,如果是,就激活添加、修改和刪除按鈕;如果是“非超級用戶”但權(quán)限“A”或“B”就激活修改按鈕;如果不是上述類型的用戶就提示權(quán)限不夠不能修改、刪除和添加密碼的操作。如果用戶密碼輸入不正確允許重試三次。

如果為“返回”_將標(biāo)題文本改為“確定”,然后將表單置為初始狀態(tài),以便進(jìn)行其它操作。

(4) 添加按鈕(Command2)的Click事件中添加如下代碼:

do case

case this.caption=添加

&&如果Command2標(biāo)題文本為添加項

this.caption=確認(rèn)添加

&&將標(biāo)題文本改為“確定”?

thisform.command3.enabled=.F.&&關(guān)閉修改和刪除按鈕

thisform.command4.enabled=.F.

thisform.label4.caption=請輸入用戶名

&&改變相應(yīng)控件名稱?

thisform.label5.caption=請輸入驗證密碼

thisform.label6.caption=請輸入權(quán)限

thisform.text1.passwordchar=&&更改文本框輸入方式,使其能輸入用戶名

case this.caption=確認(rèn)添加

&&如果Command2標(biāo)題文本為確認(rèn)添加項

if empty(thisform.text1.value) or empty(thisform.text4.value)&&判斷是否存在空輸入

=messagebox(用戶名、權(quán)限等不能為空!,48,提示) return

endif

if alltrim(thisform.text2.value)=alltrim(thisform.text3.value)&&如果密碼和驗證密碼相同

thisform.yfmm&&執(zhí)行加密方法程序?qū)π掠脩裘艽a加密處理

insert into operator values(thisform.text1.value,czycs,cjyfcs,yfqxcs)

&&在庫中添加新用戶

=messagebox(新用戶添加成功!,64,添加新用戶)

else

=messagebox(密碼錯誤,設(shè)定密碼與驗證密碼不符!,64,密碼錯誤)

end if

end case

上述代碼主要實現(xiàn)的功能:能根據(jù)按鈕的標(biāo)題文本來決定進(jìn)行何種操作。

如果為“添加”:將標(biāo)題文本改為“確認(rèn)添加”,同時更改用戶界面,以提示用戶輸入用戶名、密碼和驗證密碼、權(quán)限和是否設(shè)為超級用戶等。

如果為“確認(rèn)添加”:判斷有關(guān)的文本框是否為空,如果不為空且密碼和驗證密碼相同,則執(zhí)行加密方法程序,對新用戶密碼進(jìn)行加密處理,然后將記錄添加到operator表中。同時將標(biāo)題文本改為“添加”,以便可以繼續(xù)添加新的用戶。

(5)修改按鈕(Command3)的Click事件添加如下代碼:

do case case this.caption=修改

&&如果標(biāo)題文本為修改 this.caption=確定

thisform.command2.enabled=.F.

&&關(guān)閉添加、刪除項 thisform.command4.enabled=.F.

thisform.label4.caption=請輸入原密碼 &&賦各標(biāo)簽名稱

thisform.label5.caption=請輸入驗證密碼

thisform.label6.caption=請輸入權(quán)限

thisform.text1.passwordchar=* &&改為輸入密碼格式 case this.caption=確定

&&如果標(biāo)題文本為”修改” czycs=chr(asc(subst(alltrim(mm),1,1))-87)+; chr(asc(subst(alltrim(mm),2,1))-75)+; chr(asc(subst(alltrim(mm),3,1))-54)+; chr(asc(subst(alltrim(mm),4,1))-48)+; &&對庫中用戶原密碼解密 chr(asc(subst(alltrim(mm),5,1))-82)+; chr(asc(subst(alltrim(mm),6,1))-23)

if czycs=alltrim(thisform.text1.value) &&如果輸入密碼與庫密碼相符 if thisform.text2.value=thisform.text3.value &&判斷新密碼與驗證密碼相符

thisform.yfmm &&如果相同符執(zhí)行加密碼方法對新密碼加密處理 replace mm with czycs,cjyf with cjyfcs,;

&&修改庫中用戶密碼和權(quán)限 qx with iif(empty(alltrim(thisform.text4.value)),yfqx,yfqxcs)

=messagebox(密碼和權(quán)限修改成功,下次登錄請使用新密碼!,64,修改密碼)

else =messagebox(新密碼和驗證密碼不符!,48,密碼錯誤) return endif

else

=messagebox(你所輸入的原密碼不對!+chr(13)+你無權(quán)修改別人密碼!,48,密碼錯誤) return

end if

end case

上述代碼主要實現(xiàn)的功能為:能根據(jù)按鈕的標(biāo)題文本來決定進(jìn)行何種操作。

如果為“修改”:將標(biāo)題文本改為“確定”,同時更改用戶界面,以提示選擇用戶、輸入原密碼、新密碼、驗證密碼、權(quán)限和是否設(shè)為超級用戶等。

如果為“確定”:將庫中的該用戶密碼解密(即將庫中經(jīng)過加密的密碼還原成原密碼。其方法與加密過程類似,只各字符的ASCⅡ減去相應(yīng)的數(shù)值。),然后與用戶輸入的密碼進(jìn)行比較。如果一樣,并且新密碼和驗證密碼相同,則執(zhí)行加密方法程序,對新密碼和權(quán)限進(jìn)行加密處理,然后用其值修改operator中的原密碼和權(quán)限等。同時將標(biāo)題文本改為“修改”,以便可以繼續(xù)修改其它用戶。

(6)刪除按鈕(Command4)的Click事件中添加如下代碼:

do case

case this.caption=刪除

&&如果為刪除項 this.caption=確定

case this.caption=確定 select operator

locate for alltrim(xm)=alltrim(thisform.combo1.value)

&&將記錄定位到相關(guān)的用戶名 ts=messagebox(你確實要刪除該用戶嗎?,4+32+256,刪除系統(tǒng)用戶)

if ts=6

&&如果按是 delete &&刪除該操作員

pack

thisform.combo1.value=alltrim(xm)

end if

this.caption=刪除 endcase

上述代碼主要實現(xiàn)的功能:能根據(jù)按鈕的標(biāo)題文本來決定進(jìn)行何種操作。

如果為“刪除”,將標(biāo)題文本改為“確定”,同時更改用戶界面,以提示選擇用戶,進(jìn)行刪除操作。如果為“確定”,則將該用戶從operator表中刪除,同時將標(biāo)題文本改為“刪除”,以便可以繼續(xù)修改其它用戶。
至此,表單設(shè)計完畢(當(dāng)然為了界面的整潔,在設(shè)計中還應(yīng)根據(jù)操作的項目,設(shè)置相關(guān)控件的屬性為隱藏或顯示,關(guān)在表單中添加必要的說明等),使其能有良好的用戶界面。運行表單其效果之一如下圖所示,首次登錄時用戶名為管理員,此時密碼為空,點擊確定即進(jìn)行添加新用戶、修改管理員密碼等操作。

四、利用數(shù)據(jù)加密技術(shù)如何設(shè)計加密的vfp表單效果_

利用數(shù)據(jù)加密技術(shù)如何設(shè)計加密的vfp表單

從上述具體表單設(shè)計中我們不難看出,利用數(shù)據(jù)加密技術(shù)不僅可以設(shè)計加密表單,而且能確保數(shù)據(jù)的安全、可靠。防止非法用戶進(jìn)入系統(tǒng)或修改用戶密碼。我們將這一技術(shù)用于具體的數(shù)據(jù)庫軟件開發(fā),除設(shè)計了上述的用戶注冊表單外,還用于設(shè)計用戶登錄表單、系統(tǒng)密碼等的設(shè)計中,收到良好的效果,也得到用戶的充分肯定。

小知識之vfp

Visual FoxPro ,是Microsoft公司從Fox公司的FoxBase數(shù)據(jù)庫軟件經(jīng)過數(shù)次改良,并且移植到Windows之后,得來的應(yīng)用程序開發(fā)軟件,主要用于開發(fā)數(shù)據(jù)管理與運算等方面的軟件。VFP是Microsoft公司推出的最新可視化數(shù)據(jù)庫管理系統(tǒng)平臺,是功能特別強大的32位數(shù)據(jù)庫管理系統(tǒng)。它提供了功能完備的工具、極其友好的用戶界面、簡單的數(shù)據(jù)存取方式、獨一無二的跨平臺技術(shù),交肯有良好的兼容性、真正的可編譯性和較強的安全性,是目前最快捷、最實用的數(shù)據(jù)庫管理系統(tǒng)軟件之一。