在VFP中實現(xiàn)可靠的隨機密碼和多用戶權限控制

字號:

在應用系統(tǒng)中,經常使用口令實現(xiàn)對系統(tǒng)操作權限的控制,常規(guī)的方法是在進入系統(tǒng)時提示操作者輸入一個字符串口令。這種口令的設置方法多種多樣,有的是將固定口令密碼寫在程序里,系統(tǒng)開始要求操作者輸入該密碼,正確方可進入,這種方法的缺點是密碼不能改變,且全系統(tǒng)只有一個。還有一種方法是將操作者輸入的密碼通過加密,轉換為加密偽碼存儲在數(shù)據庫中,但這種方法的密碼和偽碼仍有顯式的對應關系,容易被*。本文介紹一種在VFP中用隨機偽碼存庫的方法實現(xiàn)簡單可靠的系統(tǒng)加密,并用此方法實現(xiàn)一個應用系統(tǒng)的多用戶權限控制,這種方法的特點是實現(xiàn)簡單,加密可靠,不易*,可將一個1至7位的用戶密碼轉換為20位的隨機偽碼,且每次重新設定密碼時所產生的偽碼都不相同,通過變換生成的20位偽碼沒有任何規(guī)律性,即使從數(shù)據庫中擦除偽碼也無法進入系統(tǒng),從而實現(xiàn)了可靠的密碼權限控制。
    ---- 一、可靠的隨機偽碼存庫
    ---- 從用戶密碼到存庫的隨機偽碼之間的變換由兩個函數(shù)完成,一個是加密函數(shù),一個是解密函數(shù)。加密函數(shù)的思想是對用戶密碼(真碼)進行復雜化、隱蔽化處理,也就是將真碼淹沒在20位偽碼中,加密函數(shù)如下:
    FUNC MAZH1
    PARA ZMZ
    ZMZ=VAL(ZMZ)
    N1=RAND()*10^9
    IF N1<=999999999
    N1=N1+10^9
    ENDI
    N1=INT(N1)
    C1=STR(N1+ZMZ)+STR(N1)
    C2=SUBS(C1,5,20)+SUBS(C1,1,4)
    P1=''
    P2=''
    FOR II=1 TO 10
    P1=P1+SUBS(C2,2*II-1,1)
    P2=P2+SUBS(C2,2*II,1)
    ENDFOR
    WMZ=P1+P2
    RETU WMZ
    ---- 若真碼為:1234567,則偽碼為:64915302152868193982,無論真碼是一位還是相同多位,偽碼總是具有同樣的不確定性和復雜性,所以若想通過簡化真碼來分析偽碼是不可能的。
    ---- 解碼函數(shù)是將數(shù)據庫中存放的偽碼轉換成原用戶密碼,其代碼如下:
    FUNC MAZH2
    PARA WMZ
    PP=''
    FOR II=1 TO 10
    PP=PP+SUBS(WMZ,II,1)+SUBS(WMZ,II+10,1)
    ENDFOR
    DD=SUBS(PP,17,4)+SUBS(PP,1,16)
    M1=SUBS(DD,1,10)
    M2=SUBS(DD,11,10)
    ZMZ=INT(VAL(M1)-VAL(M2))
    RETU ZMZ
    ---- 由于提交的系統(tǒng)全是編輯的,非法者是無法得到密碼轉換函數(shù)中的信息的,所以解密方法是不易被發(fā)現(xiàn)的。
    ---- 二、多用戶權限控制的實現(xiàn)
    ---- 對一個包含多種業(yè)務操作的應用系統(tǒng),由于業(yè)務的要求,常需要限制不同操作者的業(yè)務操作范圍,在VFP中,可以建立一個權限數(shù)據表,表中 有多個字段,分別用于存儲了每個操作者的代號、姓名、口令以及是否可以操作業(yè)務模塊的偽標識碼,見下表:
    工號 姓名 系 統(tǒng) 口 令
    業(yè)務1操作標識碼 業(yè)務2操作標識碼 …
    01 劉君紅 71510714108669886598 75913
    759130063600536 02817028179076390563 …
    02 何晚平 17615822156435449957 8341
    3834133074230642 56314563144262342423 …
    03 劉棋東 16710714110199886591 044
    18701188588160484 83413834133074230642 …
    04 趙民 58613143131858393185 4611702
    8171696390565 48710144103584210444 …
    05 王雪菲 80614563147782342425 52412
    171122488399485 53210299114872812320 …
    … …
    ---- 系統(tǒng)的主表單上的多個業(yè)務模塊由多個按鈕來實現(xiàn)啟動,那么在系統(tǒng)主表單的[確定]按鈕的CLICK EVENT方法程序中添加一些判斷代碼,就可以實現(xiàn)系統(tǒng)的口令和操作權限控制。輸入工號和口令后,按[確定],CLICK EVENT中的代碼首先根據輸入的工號,對權限數(shù)據表中對應記錄的口令偽碼進行解碼,得出的真碼與輸入口令一致放可進入系統(tǒng),口令測試通過后,再通過對每個業(yè)務所對應的偽標識碼字段內容進行解碼,確定該業(yè)務模塊是否允許操作,進而將該模塊的啟動按鈕的ENABLED屬性設置為.T.或.F.。為了在系統(tǒng)一啟動就打開權限數(shù)據表,要將權限表添加到主表單的數(shù)據環(huán)境中。主表單的一個按鈕可以啟動“權限維護”表單,該表單可以完成對每個工號的口令和操作權限設置。一般只有系統(tǒng)管理員被賦予“權限維護”的權限,不同工號的操作員在進入系統(tǒng)后可以自行修改自己的密碼,而管理員無法知道操作員的密碼,只能進行擦除,這一點更加提高了操作員密碼的安全性。
    ---- 以上表單和程序在金長城PII/400機上用Visual Foxpro5.0調試通過