QtでのSQLiteデータベース暗号化

SQLiteでの暗号化には、次のソリューションが見つかりました。





検討したソリューションのうち、SEE、SQLiteCrypt、およびSQLiteCryptoにはライセンスが必要です。 SQLCipherはCommunity Editionで使用できますが、libcryptoが必要です。



私の意見では、提示されたリストから最も興味深いソリューションはQtCipherSqlitePluginです。

プラグインはオンザフライで暗号化し、Qt APIに完全に統合されます。



プラグインは、SQLiteソースコードとwxWidgetsのwxSQLite3に基づいており、LGPL 2.1ライセンスの下でリリースされています。

暗号化アルゴリズムとして、 Advanced Encryption Standard(AES)が使用されます。



プラグインの組み立てとインストール



1.ソースコードQtCipherSqlitePluginをダウンロードします


git clone github.com/devbean/QtCipherSqlitePlugin.git







2.必要なバージョンのソースQtをダウンロードします(例では4.8.6)


wget download.qt.io/archive/qt/4.8/4.8.6/qt-everywhere-opensource-src-4.8.6.tar.gz







3.結果のアーカイブを解凍します


tar zxvf qt-everywhere-opensource-src-4.8.6.tar.gz







4. QtCreatorでプロジェクトを開きます


QtCipherSqlitePlugin \ sqlitecipher \ sqlitecipher.pro



5.ソースディレクトリQtを指定する


QtCipherSqlitePlugin \ sqlitecipher \ qt_p.priファイル内の行

#Qt4

!greaterThan(QT_MAJOR_VERSION、4):INCLUDEPATH + = <Qt4_Path> / src / sql / kernel

#Qt5

greaterThan(QT_MAJOR_VERSION、4):INCLUDEPATH + = <Qt5_Path> / Src / qtbase / src / sql / kernel


Qtソースへの適切なパスを設定します。 私の場合、Qt4では行が判明しました

/home/developer/Sources/qt-everywhere-opensource-src-4.8.6/src/sql/kernel




6.プロジェクトをまとめる


7.プラグインライブラリをプラグインディレクトリQtにコピーします


私の場合、ディレクトリ/ usr / lib / x86_64-linux-gnu / qt4 / plugins / sqldrivers



プラグインを使用する



1.パフォーマンスを確認する


QtCipherSqlitePlugin / test / test.proプロジェクトからアプリケーションを実行し、利用可能なドライバーのリストにSQLITECIPHERデータベースドライバーが表示されていることを確認します。

(「QSQLITE」、「SQLITECIPHER」)

1:「AAA」

2:「BBB」

3:「CCC」

3:「DDD」

4:「EEE」

5:「FFF」

6:「GGG」


2.暗号化されたデータベースを作成する


テストアプリケーションの実行中に作成されたファイルtest_c.dbを削除します。

test.proプロジェクトのmain.cppコードで、データベースに接続する前にパスワードを設定します。

dbconn.setPassword("password");





アプリケーションを起動すると、テストデータベースが作成されます。 閉じて、パスワードを変更し、再起動すると、間違ったパスワードでデータベースにアクセスできないことがわかります。



未解決の問題



このパスワードを使用して、すでに作成され暗号化されたデータベースのパスワードを変更する方法は不明のままです。



All Articles