利用數(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)。

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è)計中我們不難看出,利用數(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)軟件之一。









