QtCipherSqlitePlugin编译及使用方法
项目上需要对sqlite进行加密处理,通常使用SQLCipher库对sqlite进行加密,Qt提供了对SQLCipher封装好的插件QtCipherSqlitePlugin,通过该插件可以像使用sqlite一样对数据库进行操作。
一.QtCipherSqlitePlugin编译
1.下载
下载地址:
https://github.com/devbean/QtCipherSqlitePlugin
2.编译
QtCipherSqlitePlugin插件提供了qtcreator的编译工程
- QtCipherSqlitePlugin.pro
可以直接使用qtcreator进行编译,也可使用vs进行编译,本文使用vs2019进行编译,如下图所示,使用vs打开QtCipherSqlitePlugin.pro文件。
工程里包含三个项目,第一个sqlitecipher为插件dll,其他两个为测试工程,依次编译即可。
编译完成后需要将生成的sqlitecipher.dll放入Qt安装目录下的/plugins/sqldrivers中,否则后面在使用该插件时,qt会加载不到该dll。
二.使用方法
使用该插件对加密数据库加载依然使用QSqlDatabase类,区别在于添加的驱动不一样,而对数据库插入、删除等sql语句操作依旧使用QSqlQuery,附部分代码。
QString DB_FILE_PATH = "D:/test.db";
QSqlDatabase dbconn = QSqlDatabase::addDatabase("SQLITECIPHER");//添加SQLITECIPHER驱动
dbconn.setDatabaseName(DB_FILE_PATH); //localDB.db is already existing before running the application
dbconn.setPassword("1234");//设置密码
dbconn.setConnectOptions("QSQLITE_USE_CIPHER=sqlcipher;SQLCIPHER_LEGACY=1; SQLCIPHER_LEGACY_PAGE_SIZE=4096; QSQLITE_CREATE_KEY");//设置选项
dbconn.open();
dbconn.close();
该段代码即可以创建一个密码为1234的加密db,也可以为已经存在的db设置密码。
其中,QSQLITE_USE_CIPHER为加密算法,取值为如下5种:
- aes128cbc
- aes256cbc
- chacha20
- sqlcipher
- rc4
QSQLITE_CREATE_KEY为创建密码,QSQLITE_REMOVE_KEY为移除密码,QSQLITE_UPDATE_KEY为更新密码。
注意:SQLCIPHER_LEGACY=1; SQLCIPHER_LEGACY_PAGE_SIZE=4096;需要写上,如果不写的话,使用代码创建的db,用SQLiteStudio无法打开,不知道什么原因,欢迎知道原因的评论区留言。
更新密码示例
QString DB_FILE_PATH = "D:/test.db";
QSqlDatabase dbconn = QSqlDatabase::addDatabase("SQLITECIPHER");//添加SQLITECIPHER驱动
dbconn.setDatabaseName(DB_FILE_PATH); //localDB.db is already existing before running the application
dbconn.setPassword("1234");//设置密码
dbconn.setConnectOptions("QSQLITE_USE_CIPHER=sqlcipher;SQLCIPHER_LEGACY=1; SQLCIPHER_LEGACY_PAGE_SIZE=4096; QSQLITE_UPDATE_KEY=pass");//设置选项
dbconn.open();
dbconn.close();
QSQLITE_UPDATE_KEY等于的部分为新密码。