Вариантов шифрования баз SQLite немного, один из них - SQLCipher, имеющий открытый исходный код и свободно распространяемый в варианте Community Edition. Более того, имеется возможность скомпилировать его в виде плагина для баз данных в Qt 5 и для этого уже есть готовый проект: qt5-sqlcipher.
Проблема в том, что вышеупомянутый проект тестировался автором только на Mac OS X 10.7, а мне нужны плагины под Windows, Mac OS X и, возможно, для Android и Linux. Начать я решил с простого - Linux и Mac OS X.
На всех системах имеется Qt 5.3.2 с уже установленными исходниками qtbase, поэтому выкачивать еще раз их не нужно. Git под Mac OS X и Linux установлен. Сначала берем исходники самого qt5-sqlcipher (без ключа --recursive):
git clone https://github.com/sijk/qt5-sqlcipher.git
Переходим в каталог qt5-sqlcipher и скачиваем исходники самого SQLCipher:
git clone https://github.com/sqlcipher/sqlcipher.git
В каталоге проекта qt5-sqlcipher создаем файл .qmake.conf, указывающий путь к исходникам qtbase. В моем случае (под Linux) это была строчка
QT_SRCDIR=/home/az/Qt/5.3/Src/qtbase
Под Mac OS X 10.9 проект qt5-sqlcipher собрался без каких-либо правок - достаточно было просто открыть файл проекта в Qt Creator и запустить сборку. Библиотека OpenSSL, которая нужна для сборки SQLCipher, уже была. Готовый плагин (файл libqsqlcipher.dlyb, есть также отладочный вариант - libqsqlcipher_debug.dlyb) находится в подкаталоге plugins/sqldrivers каталога сборки проекта. Для проверки его работоспособности я просто скопировал плагин в подкаталог plugins/sqldrivers Qt. База данных с драйвером "QSQLCIPHER" работает.
Под Linux (Debian Testing) нужно поставить пакет libssl-dev (сама OpenSSL почти наверняка уже присутствует). Параметр LDFLAGS="-lcrypto" скрипту configure под Linux не понравился, что, в общем-то, ожидаемо - для этого нужно использовать LIBS. Поэтому в файл проекта qsqlcipher.pro была внесена следующая правка:
mac {
SQLCIPHER_CONFIGURE = --enable-tempstore=yes \
--disable-tcl \
CFLAGS="-DSQLITE_HAS_CODEC" \
LDFLAGS="-lcrypto"
}
linux {
SQLCIPHER_CONFIGURE = --enable-tempstore=yes \
--disable-tcl \
CFLAGS="-DSQLITE_HAS_CODEC" \
LIBS="-lcrypto"
}
Во-вторых, не находится заголовочный файл sqlite3.h. Для этого добавляем путь к нему:
linux {
INCLUDEPATH += $$PWD/sqlcipher
}
После этого проект собрался "одним движением", то есть просто запуском сборки. Готовый плагин libqsqlcipher.so из подкаталога plugins/sqldrivers также был скопирован в соответствующий подкаталог плагинов Qt и проверен. Работает.
История же со сборкой под Windows куда более длинная и извилистая и будет рассказана в следующем посте.
Комментариев нет:
Отправить комментарий