Delphi對Access檔案加密

2021-05-24 03:04:09 字數 1656 閱讀 4337

下面的過程不會提示不認識資料庫,只是會提示密碼錯誤,任何讀取密碼的軟體都不能讀出正確的密碼

function lockupfile(filename:string;lock:boolean=true):integer;

//加密、解密資料庫,針對 access 2000

var

f:file;

bf:array[0..63] of byte;

i:integer;

const

fpos=64;

flen=64;

//下面改為自己的金鑰,我是用隨機生成的,請改為自己的金鑰

pw:array[0..63] of byte=

($97,$a0,$0c,$a1,$06,$59,$0a,$6d,

$91,$33,$51,$57,$d4,$a3,$94,$16,

$3d,$b2,$c7,$a0,$7c,$a3,$30,$ee,

$34,$d6,$c1,$ff,$f7,$ec,$a5,$1f,

$71,$2c,$19,$69,$e3,$25,$7d,$8b,

$d3,$95,$ab,$c9,$02,$8a,$87,$44,

$9f,$c7,$d7,$7d,$ba,$69,$56,$15,

$fb,$cb,$03,$d6,$94,$a6,$bf,$f7);

begin

result:=-1;

if not fileexists(filename) then exit;

try

assignfile(f,filename);

reset(f,1);

seek(f,fpos);

blockread(f,bf,flen);

//下面的**是判斷是否被加密,你可以用二進位制編輯器開啟mdb檔案對比,

//我是用第64,65位元組作為是否加密的標記,未加密與版本相關,加密後與版本和金鑰相關

if lock and (bf[0]=$2b) and (bf[1]=$ee)

or not lock and (bf[0]=$bc) and (bf[1]=$4e)

or not ((bf[0]=$2b) and (bf[1]=$ee))

and not ((bf[0]=$bc) and (bf[1]=$4e)) then

begin

result:=0;

exit;

end;

for i:=0 to flen-1 do

bf[i]:=bf[i] xor pw[i mod 64];

seek(f,fpos);

blockwrite(f,bf,flen);

result:=1;

finally

closefile(f);

end;

end;

以ado為例,把adoconnection.mode設為cmshareexclusive就可以以獨佔方式開啟資料庫,

任何除你程式之外的程式都不能訪問資料庫檔案,複製也不行,但是使用者用任務管理器強行

結束你的程式可以讓你沒加密就退出,如果要更安全,就要寫另乙個程式和你的主程式來互

相監視,監視程式如果能訪問資料庫則馬上給它加密.主程式也要保證監視程式的執行.

Delphi連線ACCESS的方法

delphi 連線access 的方法 一 tadoconnection connmain 為tadoconnection tadoconnection主要作用是連線資料庫 connectionstring 連線資料庫 connected 設為true keepconnection 設為true l...

Delphi對ini檔案的操作

一 ini檔案的結構 注釋 小節名 關鍵字 值 ini檔案允許有多個小節,每個小節又允許有多個關鍵字,後面是該關鍵字的值。值的型別有三種 字串 整型數值和布林值。其中字串存貯在ini檔案中時沒有引號,布林真值用1表示,布林假值用0表示。注釋以分號 開頭。二 定義 1 在inte ce的uses節增加...

delphi對ini檔案的操作

定義 1 在inte ce的uses節增加inifiles 2 在var變數定義部分增加一行 myinifile tinifile 開啟ini檔案 myinifile tinifile.create program.ini 當地 filename extractfilepath paramstr 0...