我想在Qt中使用加密的SQLite数据库。是否可以通过QSqlDatabase
连接到数据库并使用SQLCipher加密或解密数据库?例如,我经常连接到SQLite数据库文件,如下所示:
QSqlDatabase db = QSqlDatabase::addDatabase( "QSQLITE","Main_Connection" );
db.setDatabaseName( "Main.sqlite" );
db.open();
我想知道是否可以使用SQLCipher API解密数据库并使用Qt数据库模块连接和操作数据库?
答案 0 :(得分:1)
由于API相同,您应该能够使用SQLCipher构建Qt的SQLITE驱动程序而无需修改。唯一需要注意的是,
http://sqlcipher.net/sqlcipher-api/
如果你在Linux上并且不能(或者不想)修改系统,那么在sqlite下修改configure脚本的情况,这样它就会找到sqlcipher头并与正确的libsqlcipher库链接。例如,此更改允许我使用SQLCipher构建SQLite插件,
--- a/configure
+++ b/configure
@@ -4736,12 +4736,12 @@ for _SQLDR in $CFG_SQL_AVAILABLE; do
if [ "$CFG_SQL_sqlite" != "no" ]; then
SQLITE_AUTODETECT_FAILED="no"
if [ "$CFG_SQLITE" = "system" ]; then
- if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists sqlite3 2>/dev/null; then
+ if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists sqlite3override 2>/dev/null; then
QT_CFLAGS_SQLITE=`$PKG_CONFIG --cflags sqlite3 2>/dev/null`
QT_LFLAGS_SQLITE=`$PKG_CONFIG --libs sqlite3 2>/dev/null`
else
- QT_CFLAGS_SQLITE=
- QT_LFLAGS_SQLITE="-lsqlite3 -lz"
+ QT_CFLAGS_SQLITE="-I/usr/include/sqlcipher"
+ QT_LFLAGS_SQLITE="-lsqlcipher -lz"
fi
if compileTest unix/sqlite "SQLite" $QT_LFLAGS_SQLITE $QT_CFLAGS_SQLITE; then
if [ "$CFG_SQL_sqlite" = "auto" ]; then
然后你需要配置-system-sqlite