Я понимаю причины, по которым вы должны зашифровать свою старую базу данных доступа, потому что безопасность доступа 2000 и 2003 очень слаба. но моя основная рекомендация заключается в том, чтобы попытаться выполнить обновление до Access 2007 или более поздней версии, который использует Microsoft Cryptographic API и включает в себя значительные улучшения в области безопасности.
Если вы не можете обновить, здесь я оставляю возможность зашифровать ваш файл MDB.
1) для шифрования ваших данных вы можете использовать устройство JwaWinCrypt
, которое является частью библиотеки Jedi JWSCL
, вы можете скачать эту библиотеку с здесь .
проверьте этот пример функции, которая использует алгоритм 3DES для шифрования файла.
uses
Classes,
JwaWinType,
JwaWinCrypt,
SysUtils;
procedure CryptFile(Const InFileName, OutFileName, Password: AnsiString; Encrypt: Boolean);
const
BufferSize=1024*64;
var
StreamSource : TFileStream;
StreamDest : TFileStream;
CRYPTPROV : HCRYPTPROV;
CRYPTHASH : HCRYPTHASH;
CRYPTKEY : HCRYPTKEY;
Buffer : LPBYTE;
BytesIn : DWORD;
Final : Boolean;
begin
CryptAcquireContext(CRYPTPROV, nil, nil, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT);
try
CryptCreateHash(CRYPTPROV, CALG_3DES_112, 0, 0, CRYPTHASH);
try
CryptHashData(CRYPTHASH, @Password[1], Length(Password), 0);
CryptDeriveKey(CRYPTPROV, CALG_3DES, CRYPTHASH, 0, CRYPTKEY);
finally
CryptDestroyHash(CRYPTHASH);
end;
StreamSource := TFileStream.Create(InFileName, fmOpenRead or fmShareDenyWrite);
StreamDest := TFileStream.Create(OutFileName, fmCreate);
try
GetMem(Buffer, BufferSize);
try
repeat
BytesIn := StreamSource.Read(Buffer^, BufferSize);
Final := (StreamSource.Position >= StreamSource.Size);
if Encrypt then
CryptEncrypt(CRYPTKEY, 0, Final, 0, Buffer, BytesIn, BytesIn)
else
CryptDecrypt(CRYPTKEY, 0, Final, 0, Buffer, BytesIn);
StreamDest.Write(Buffer^, BytesIn);
until Final;
finally
FreeMem(Buffer, BufferSize);
end;
finally
StreamSource.Free;
StreamDest.Free;
end;
finally
CryptReleaseContext(CRYPTPROV, 0);
end;
end;
и использовать таким образом
для шифрования файла
CryptFile('C:\temp\in.zip', 'C:\temp\out.zip','fdkjldf3832kka83' ,True);
для расшифровки файла
CryptFile('C:\temp\out.zip', 'C:\temp\in.zip','fdkjldf3832kka83' ,True);
2) о расположении кода для шифрования и дешифрования данных, будет зависеть от дизайна вашего приложения.
3) имейте в виду, что в случае сбоя приложения ваши данные будут незащищены.
4) возможно, лучшим вариантом является создание небольшого приложения, которое расшифровывает ваши данные и запускает ваше основное приложение и продолжает следить за состоянием, пока основное приложение не завершится. а затем снова зашифруйте ваши данные.