熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Delphi編程 >> 正文

用注冊表對Delphi程序加密

2013-11-23 17:38:48  來源: Delphi編程 
    本加密方法分三部分
     根據對注冊表的搜索結果判定設置對話框的內容
     若初次使用則設新密碼若是已經設置密碼則進行驗證
     一個密碼變換小程序(比原來的復雜得多)當然如果需要修改密碼的功能只要將設置密碼部分改動一下即可

    一程序啟動時通過搜索注冊表判斷是否已有密碼來確定窗口的顯示內容不過事先應有以下的聲明然後才能使用 
    在user中加入TRegistry在var聲明中加入以下幾個窗體變量
    TheReg: TRegistry; 
    KeyNameValueStrtempStr:String;
    procedure TfrmPassFormShow(Sender: TObject);
    begin 
        TheReg := TRegistryCreate; 
        try TheRegRootKey := HKEY—LOCAL—MACHINE; 
        KeyName := ′SOFTWARE\Mypassword′; 
        //有該鍵則打開沒有則創建 
        if TheRegOpenKey(KeyName True) then begin 
            tempStr:=ExtractFileName(ApplicationExeName); //讀取密碼 
            ValueStr:=TheRegReadString(tempStr); 
            //密碼不為空則修改窗體為驗證密碼 
            if ValueStr<>′′ then begin 
                editVisible:=false; frmPassCaption:=′驗證密碼′; 
                editSetFocus; OKCaption:=′確定′; end 
                //密碼為空則修改窗體為設置密碼對話框 
            else begin 
            showmessage(′第一次使用請設置密碼!′); 
            editVisible:=true; frmPassCaption:=′請設置新密碼′; 
            editSetFocus; OKCaption:=′設置′; 
        end; TheRegCloseKey; end; 
    finally TheRegFree; end; end;
 
    二按鈕的響應代碼包括新設密碼和驗證密碼
    procedure TfrmPassOKClick(Sender: TObject); 
    begin 
        //根據Edit的顯示與否判斷已有密碼進行驗證 
        if editVisible=false then begin 
            if pass(edittext)=ValueStr then begin 
                showmessage(′密碼正確!′); end 
            else begin 
                showmessage(′密碼不正確!無權操作!′); 
            halt; end; end //無密碼設置新密碼 
        else begin 
        if edittext=edittext then begin 
            TheReg := TRegistryCreate; 
            TheRegRootKey := HKEY—LOCAL—MACHINE; 
            KeyName := ′SOFTWARE\Mypassword′; 
                if TheRegOpenKey(KeyName True) then 
                    TheRegWriteString(tempStrpass(edittext)); 
                    TheRegCloseKey; end 
                else begin 
            showmessage(′再次鍵入的密碼不一致請重輸!′); 
        edittext:=′′; edittext:=′′; 
        editSetFocus; end; //進行下一步操作 
    end; end;
 
    三密碼變換程序注意要預先定義
    這個變換小程序在筆者看來還不算很復雜只進行了兩次變換不過想要破譯也是得費點勁讀者還可以采用其他的數學函數進行更為復雜的變換
    function pass(pstr:string):string; 
    var strstr:string;
    ij: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
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.