?? delphi編寫網絡程序的安全措施n.txt
字號:
一、 原理
目前進行數據加密的方法很多,對數據的保護起到一定的作用。但如果采用固定的密鑰或是密鑰隨數據一起傳送,則均不能達到令人滿意的保密效果。在實踐過程中,我摸索出了一套“請求-應答”模式的隨機密鑰方法,對密碼和數據的保密效果都令人十分滿意。
當客戶端程序啟動并企圖與服務器程序建立連接時,客戶程序從服務器端取得一個由服務器程序產生的隨機字串,系統將以此字串為密鑰來傳送用戶登錄密碼和數據。由于密鑰由服務器程序隨機產生,客戶每次登錄時密鑰均不相同,因此大大減少了密碼被攔截導致數據被竊的可能性。
服務器端可以在遠程數據模塊中引出一個自定義接口,該接口返回一個隨機字串。遠程數據模塊要記錄該字串作為后續處理的密鑰。隨機字串的產生法可以多種多樣,最簡單的方法是用Random()函數產生一個隨機數后再由此數用Format()函數或IntToStr()產生一個字符串。
二、 用戶登錄措施
為了防止程序被非法調試從而泄露密碼,必須將客戶的登錄信息在服務器端處理,也可以專門增加一個安全層負責客戶的登錄。客戶的登錄信息儲存在客戶資料表中,包括用戶名、密碼、權限等信息。
客戶程序登錄時,先調用服務器程序的接口獲得密鑰字串,并用此密鑰對用戶輸入的用戶名和密碼進行加密并向服務器發送登錄信息。加密算法可以是DES算法或其它有效算法。服務器接到登錄信息后,先用先前產生并記錄的隨機密鑰對登錄信息進行解密,再將解密后的信息與存儲的客戶資料表中的信息進行對照,從而判斷客戶信息是否合法以及該客戶享有的數據權限等。
該過程的客戶端程序如下:
strKey:=myRemoteSever.GetKey();
{調用服務器的接口獲得隨機密鑰}
UserName:=Ency(strUserName,strKey);
{對用戶名加密,Ency()為加密算法}
Password:=Ency(strPassword,strKey);
{對登錄密碼進行加密}
If myRemoteServer.LogIn(UserName,Password) then {登錄}
Begin
{進行處理}
End;
服務器端的登錄過程LogIn()如下:
strUserName:=DeEncy(UserName,strKey);
{對用戶名解密,DeEncy()為解密算法}
strPassword:=DeEncy(Password,strKey);
{對登錄密碼解密}
{查詢數據庫}
if (Pass) then
Result:=true
Else
Result:=false;
要注意的是,在服務器程序和客戶程序中,StrKey均應定義為全程變量。
為了防止客戶資料表被程序外打開從而泄露密碼,可以對客戶資料進行一定的加密措施,例如PARADOX表可以添加Password,服務器程序在訪問客戶資料表時先提供該Password。中國教程在線,http://www.5istudy.cn
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -