首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi FireDAC SQLite 資料庫加密(六):AES-256 透明加密、密碼變更、無密碼模式切換

     編輯:Delphi

前言

SQLite 原生不支援加密,FireDAC 整合 SQLite Encryption Extension (SEE) 或 wxSQLite3 AES 實現,透過連接參數 Password、NewPassword 實現透明加密:建庫即加密、開啟需密碼、修改密碼無需導出導入,完全零代碼入侵業務邏輯。

一、建立加密資料庫

const DB_PATH = 'C:\Data\SecureDB.sdb';

procedure TForm1.FormCreate(Sender: TObject);
const SQL_TABLE = 'CREATE TABLE Users(ID INTEGER PRIMARY KEY, Name TEXT, Age INTEGER)';
begin
  if FileExists(DB_PATH) then DeleteFile(DB_PATH);

  FDConnection1.Params.Add('DriverID=SQLite');
  FDConnection1.Params.Add('Database=' + DB_PATH);
  FDConnection1.Params.Add('Password=MySecret123'); // 預設 AES-256
  // 可指定演算法:Password=aes-128:MySecret, aes-192:..., aes-ctr-256:..., aes-ecb-256:...

  FDConnection1.ExecSQL(SQL_TABLE);
  FDConnection1.ExecSQL('INSERT INTO Users(Name, Age) VALUES(:n, :a)', ['Alice', 30]);
end;

二、開啟加密資料庫

procedure TForm1.btnOpenClick(Sender: TObject);
begin
  FDConnection1.Params.Clear;
  FDConnection1.Connected := False;
  FDConnection1.Params.Add('DriverID=SQLite');
  FDConnection1.Params.Add('Database=' + DB_PATH);
  FDConnection1.Params.Add('Password=MySecret123'); // 必須正確
  FDConnection1.Connected := True;
  FDQuery1.Open('SELECT * FROM Users');
end;

三、修改密碼(或移除加密)

procedure TForm1.btnChangePwdClick(Sender: TObject);
begin
  FDConnection1.Params.Clear;
  FDConnection1.Connected := False;
  FDConnection1.Params.Add('DriverID=SQLite');
  FDConnection1.Params.Add('Database=' + DB_PATH);
  FDConnection1.Params.Add('Password=MySecret123');      // 舊密碼
  FDConnection1.Params.Add('NewPassword=NewSecret456');  // 新密碼,空字串 = 移除加密
  FDConnection1.Connected := True; // 觸發重新加密
  FDConnection1.Connected := False;
  ShowMessage('密碼已變更');
end;

四、支援的加密演算法

參數值演算法備註
Password=SecretAES-256 (CBC)預設,安全性最高
Password=aes-128:SecretAES-128速度較快
Password=aes-192:SecretAES-192平衡
Password=aes-256:SecretAES-256明確指定
Password=aes-ctr-128/192/256:SecretAES-CTR 模式可並行加密
Password=aes-ecb-128/192/256:SecretAES-ECB 模式不推薦(無 IV)

五、注意事項

  • 密碼遺失 = 資料永久不可恢復,請妥善保管(密碼管理器、硬體金鑰)。
  • 加密有效能開銷(約 5~15%),大量寫入場景可考慮 AES-128-CTR。
  • 備份檔同樣加密,TFDSQLiteBackup 目標連接需同樣密碼。
  • FireDAC 專業版才包含加密驅動,社區版可能需第三方 wxSQLite3 編譯。

結語

FireDAC 將 SQLite 加密降維為兩個連接參數(Password/NewPassword),實現了「零代碼、透明、可變更」的資料級加密,是桌面/嵌入式應用保護敏感資料的最佳選擇。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved