Зашифруйте / расшифруйте файл базы данных MS Access 2000 (* .mdb) (дополнительная безопасность) - PullRequest
1 голос
/ 02 декабря 2010

Для дополнительной безопасности я хотел бы зашифровать / расшифровать файл базы данных MS Access 2000 (* .mdb).

Я использую Delphi 7 и ищу бесплатное решение или решение с открытым исходным кодом (возможно только две функции, которые позволяют передавать имя файла и ключ).

Я хотел бы выполнить расшифровку перед запуском моего приложения и шифрование при завершении работы приложения. Где лучшие места для этого. События OnCreate, OnDestroy?

Я предполагаю, что сначала мне нужно будет создать небольшую утилиту, которая сначала использует зашифрованную часть решения для шифрования файла базы данных?

спасибо

Ответы [ 2 ]

1 голос
/ 02 декабря 2010

Я понимаю причины, по которым вы должны зашифровать свою старую базу данных доступа, потому что безопасность доступа 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) возможно, лучшим вариантом является создание небольшого приложения, которое расшифровывает ваши данные и запускает ваше основное приложение и продолжает следить за состоянием, пока основное приложение не завершится. а затем снова зашифруйте ваши данные.

0 голосов
/ 03 декабря 2010

Я бы предложил вам проверить этот сайт: http://www.cityinthesky.co.uk/cryptography.html

...