下面的過程不會提示不認識資料庫,只是會提示密碼錯誤,任何讀取密碼的軟體都不能讀出正確的密碼
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...