QT自带的数据库插件并不支持对数据库进行加密以及读取已经加密的数据库功能,需要下载QtCipherSqlitePlugin插件:源码地址
插件编译使用方法:
源码结构如下图:
demo内是一个实例,sqlitecipher内是插件源码,test_plugin内是插件接口测试。
1. 首先使用项目对应的编译器对sqlitecipher进行构建,debug/release模式均可,注意:插件默认使用的加密算法为"CODEC_TYPE=CODEC_TYPE_CHACHA20",可以在sqlite3.pri中修改CODEC_TYPE的值来修改加密方式
(位于sqlite3mc_amalgamation.c的第250344行)
2. 构建好之后将构建目录下 .\sqlitecipher\plugins\sqldrivers的 sqlitecipher.dll 以及 sqlitecipherd.dll(debug版本,根据实际情况复制)复制到对应编译器所在位置下的插件文件夹下,比如在我的电脑上的路径为 D:\APP\QT\5.15.2\msvc2019\plugins\sqldrivers。
3. 查看 QSqlDatabase::drivers() 的打印结果,若包含 "SQLITECIPHER" 则说明插件安装成功。
连接已经加密的数据库方式:
保持原有的连接数据库过程,增加db.setPassword("Key"),以及设置连接参数时增加对应的加密方法,如使用AES 128 Bit CBC,需要设置连接参数:db.setConnectOptions("QSQLITE_USE_CIPHER=aes128cbc");注QtCipherSqlitePlugin共支持四种加密方式,对应关系如下图:
对未加密的数据库进行加密:
同上述方式相同,只是在设置连接参数时不一样:db.setConnectOptions("QSQLITE_USE_CIPHER=aes128cbc; SQLCIPHER_LEGACY=1; SQLCIPHER_LEGACY_PAGE_SIZE=4096; QSQLITE_CREATE_KEY");