本加密方法分三部分
根據對注冊表的搜索結果判定設置對話框的內容
若初次使用
則設新密碼
若是已經設置密碼
則進行驗證
一個密碼變換小程序(比原來的復雜得多)
當然
如果需要修改密碼的功能
只要將設置密碼部分改動一下即可
一
程序啟動時
通過搜索注冊表
判斷是否已有密碼
來確定窗口的顯示內容
不過事先應有以下的聲明然後才能使用
在user中加入TRegistry
在var聲明中加入以下幾個窗體變量
TheReg: TRegistry;
KeyName
ValueStr
tempStr:String;
procedure TfrmPass
FormShow(Sender: TObject);
begin
TheReg := TRegistry
Create;
try TheReg
RootKey := HKEY—LOCAL—MACHINE;
KeyName := ′SOFTWARE\Mypassword′;
//有該鍵則打開
沒有則創建
if TheReg
OpenKey(KeyName
True) then begin
tempStr:=ExtractFileName(Application
ExeName); //讀取密碼
ValueStr:=TheReg
ReadString(tempStr);
//密碼不為空則修改窗體為驗證密碼
if ValueStr<>′′ then begin
edit
Visible:=false; frmPass
Caption:=′驗證密碼′;
edit
SetFocus; OK
Caption:=′確定′; end
//密碼為空則修改窗體為設置密碼對話框
else begin
showmessage(′第一次使用請設置密碼!′);
edit
Visible:=true; frmPass
Caption:=′請設置新密碼′;
edit
SetFocus; OK
Caption:=′設置′;
end; TheReg
CloseKey; end;
finally TheReg
Free; end; end;
二
按鈕的響應代碼
包括新設密碼和驗證密碼
procedure TfrmPass
OKClick(Sender: TObject);
begin
//根據Edit
的顯示與否判斷已有密碼
進行驗證
if edit
Visible=false then begin
if pass(edit
text)=ValueStr then begin
showmessage(′密碼正確!′); end
else begin
showmessage(′密碼不正確!無權操作!′);
halt; end; end //無密碼
設置新密碼
else begin
if edit
text=edit
text then begin
TheReg := TRegistry
Create;
TheReg
RootKey := HKEY—LOCAL—MACHINE;
KeyName := ′SOFTWARE\Mypassword′;
if TheReg
OpenKey(KeyName
True) then
TheReg
WriteString(tempStr
pass(edit
text));
TheReg
CloseKey; end
else begin
showmessage(′再次鍵入的密碼不一致
請重輸!′);
edit
text:=′′; edit
text:=′′;
edit
SetFocus; end; //進行下一步操作
end; end;
三
密碼變換程序
注意要預先定義
這個變換小程序在筆者看來還不算很復雜
只進行了兩次變換
不過
想要破譯也是得費點勁
讀者還可以采用其他的數學函數進行更為復雜的變換
function pass(pstr:string):string;
var str
str
:string;
i
j:integer;
begin
str:=pstr;
for i:=
to length(str) do begin
//進行第一次變換
j:=(i*i*i mod (i+
))+(i*i mod (i+
))+i*
+
;
str
:=str
+chr(ord(str[i])+j); //第二次變換
j:=(i*i*i mod (i+
))+(i*i mod (i+
))+i*
+
;
str
:=str
+chr(ord(str[i])+j); end;
pass:=str
;
end;
From:http://tw.wingwit.com/Article/program/Delphi/201311/24821.html