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

未解決の問題


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

Source: https://habr.com/ru/post/J216739/


All Articles