は、私がアクセス2000および2003のセキュリティが非常に弱いので、あなたが、あなたの古いAccessデータベースを暗号化する必要がある理由は理解しています。私の主な勧告は、Microsoft Cryptographic APIを使用するAccess 2007以上にアップグレードし、セキュリティを大幅に改善することです。
アップグレードできない場合、ここではmdbファイルを暗号化するオプションを残しておきます。
1)あなたはJwaWinCrypt
ユニット(Jedi JWSCL
ライブラリの一部です)を使用してデータを暗号化するには、hereからこのライブラリをダウンロードしてください。
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\out.zip', 'C:\temp\in.zip','fdkjldf3832kka83' ,True);
2ファイルを復号化するファイル
CryptFile('C:\temp\in.zip', 'C:\temp\out.zip','fdkjldf3832kka83' ,True);
を暗号化するために、このように
を使用)encryot及び復号化するためのコードの位置についてデータは、あなたのアプリケーションの設計に依存します。
3)アプリケーションがクラッシュした場合、データは保護されないことに注意してください。
4)データを復号化してメインアプリケーションを起動し、メインアプリケーションが終了するまでステータスを監視し続ける小さなアプリケーションを作成するのが最善の選択肢です。データを再度暗号化します。
正確にあなたがこれを行うことによって達成されるでしょうと思いますか?ケース4の場合は –