最新消息:

使用FireDAC加密SQLite数据库 delphi开发中sqlite报错

编程 koic_zhzz 243浏览 0评论

FireDACでは、暗号化モードのデフォルトは、「aes-256」です。

在FireDAC中,加密模式的默认值为“aes-256”。

暗号化するための前準備

FireDACでSQLiteデータベースの暗号化を管理するためには、TFDSQLiteSecurityコンポーネントを利用します。

要在FireDAC中管理SQLite数据库的加密,请使用TFDSQLiteSecurity组件。

このコンポーネントを利用すると、データベースの暗号化、データベースの復号化、暗号化されたデータベースのパスワードの変更といった操作が行えます。TFDSQLiteSecurityコンポーネントは、ツールパレットの[FireDAC Services]というカテゴリに配置されています。

此组件可用于加密数据库、解密数据库和更改加密数据库的密码。TFDSQLiteSecurity组件位于工具选项板的“FireDAC Services”类别中。

Thumb03000092ujpn.jpg

図1: TFDSQLiteSecurityコンポーネントの配置とDriverLinkの設定-图1:放置TFDSQLiteSecurity组件并设置驱动程序链接

図1のようにTFDSQLiteSecurityコンポーネントをフォームやデータモジュールへ配置し、オブジェクトインスペクタで、TFDSQLiteSecuritのDriverLinkプロパティにSQLiteのデータベースドライバ(TFDPhysSQliteDriverLink)を設定してください。

如图1所示,将TFDSQLiteSecurity组件放置在窗体或数据模块中,在对象检查器中,在TFDSQLiteSecurit的DriverLink属性中设置SQLite的数据库驱动程序(TFDPhysSQLiteDriverLink)。

データベースを暗号化する

FireDACでSQLiteデータベースを暗号化するには、以下のようにコーディングします。

要在FireDAC中加密SQLite数据库,请进行如下编码。

Delphiの場合:

FDSQLiteSecurity1.Database := '...'; 
FDSQLiteSecurity1.Password := '<暗号化モード>:<パスワード>'; 
FDSQLiteSecurity1.SetPassword;

C++Builderの場合:

FDSQLiteSecurity1->Database = "..."; 
FDSQLiteSecurity1->Password = "<暗号化モード>:<パスワード>"; 
FDSQLiteSecurity1->SetPassword();

但し、Passwordプロパティに指定するパスワードは、暗号化モードとパスワードを:(コロン)で連結した組み合わせの文字列を設定する必要があります。

例えば、

-SQLiteデータベースファイルの絶対パスが "C:UsersPublicDocumentsSample.db"
-暗号化モードが "aes-128"
-パスワードが "12345"

の場合は、以下のように記述します。

Delphiの場合:

FDSQLiteSecurity1.Database := 'C:Sample.db'; 
FDSQLiteSecurity1.Password := 'aes-128:12345'; 
FDSQLiteSecurity1.SetPassword;

C++Builderの場合:

FDSQLiteSecurity1->Database = "C:UsersPublicDocumentsSample.db"; 
FDSQLiteSecurity1->Password = "aes-128:12345"; 
FDSQLiteSecurity1->SetPassword();

データベースを復号する

暗号化されたSQLiteデータベースをFireDACで復号化するには、以下のようにコーディングします。

Delphiの場合:

FDSQLiteSecurity1.Database := '...'; 
FDSQLiteSecurity1.Password := '<暗号化モード>:<パスワード>'; 
FDSQLiteSecurity1.RemovePassword;

C++Builderの場合:

FDSQLiteSecurity1->Database = "..."; 
FDSQLiteSecurity1->Password = "<暗号化モード>:<パスワード>"; 
FDSQLiteSecurity1->RemovePassword();

なお、Passwordプロパティに設定するパスワードは、データベースの暗号化と同じく暗号化モードとパスワードを:(コロン)で連結した組み合わせの文字列になります。そして、復号化で設定するパスワードは、必ずデータベースを暗号化する際に指定したパスワードを入力してください。

暗号化したデータベースへ接続する

FireDACで暗号化されたSQLiteデータベースへアクセスするには、TFDConnectionのParamsプロパティの接続パラメータである”Password”と”Encrypt”にデータベースを暗号化する際に設定したパスワードと暗号化モードを指定します。

例えば、暗号化モードが”aes-128”、パスワードが”12345”でSQLiteデータベースを暗号化した場合は、以下のようにコーディングします。

Delphiの場合:

FDConnetcion1.Params.Add := 'Encrypt=aes-128'; 
FDConnetcion1.Params.Add := 'Password=12345';

C++Builderの場合:

FDConnetcion1->Params->Add = "Encrypt=aes-128"; 
FDConnetcion1->Params->Add = "Password=12345";

またTFDConnetionの接続エディタで設定する場合は、以下の図の通りです。

Thumb03000093ujpn.jpg

図2: FireDAC 接続エディタ

エラーメッセージ

FireDACで暗号化されたSQLiteデータベースへ接続すると、様々なエラーが発生することがあります。そのエラーメッセージの例をいくつか紹介いたします。

连接到用FireDAC加密的SQLite数据库时,可能会出现各种错误。我来介绍几个错误信息的例子。

  • [FireDAC][Phys][SQLite] ERROR: Cipher: DB is not encrypted

暗号化されていないデータベースに対して、復号化しようとすると発生します。

尝试对未加密的数据库进行解密时发生。

  • [FireDAC][Phys][SQLite] ERROR: file is encrypted or is not a database

既に暗号化されている、あるいは暗号化モードが異なるパスワードを指定すると発生します。

指定已加密或加密模式不同的密码时发生。

  • [FireDAC][Phys][SQLite] ERROR: Cipher: Invalid password is specified or DB is corrupted

データベースの復号時や暗号化されたデータベースへの接続時に、指定するパスワードが間違っていると発生します。

在解密数据库或连接到加密数据库时,如果指定的密码错误,则会发生这种情况。

转载请注明:落伍老站长 » 使用FireDAC加密SQLite数据库 delphi开发中sqlite报错

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址