qt使用QtCipherSqlitePlugin插件对sqlite数据库进行加密
2014-09-24 14:45
1016 查看
由于在开发中遇到需要将对应的sqlite数据库进行一个加密,于是当然就首先看看sqlite自己有没有.... 然后 果然有预留接口,不过是空的。。官方实现要几百刀。。。所以果断只能第三方的插件库了。 查了一下有好多实现加密的插件,当然这里就选择了其中一个而已,github的地址:https://github.com/devbean/QtCipherSqlitePlugin,这是基于wxSQLite3的加密,详细的就可以了解:http://wxcode.sourceforge.net/components/wxsqlite3/。
后来去插件的作者的博客,还看到了比较详细的两篇的文章,这里也贴一下http://www.devbean.net/2012/07/qt-sqlite-plugin-with-encryption/,http://www.devbean.net/2013/01/qt-sqlite-plugin-with-encryption-v02/。
源码下下来包含了加密插件的源码还有一个测试的程序,首先需要修改sqlitecipher/qt_p.pri中对应的qt的代码位置,之后就可以编译sqlitecipher.pro项目了,编译debug和release后分别把生成的sqlitecipherd.dll 和sqlitecipher.dll 拷到对应的qt安装目录的sql驱动插件目录下plugins/sqldrivers下,就能在程序里进行使用了,使用测试程序先测试一下插件的运行请款就好了。
在这个插件中实现的其实就是实现了qtsqlitedriver的一个open的函数,添加了密码等参数,做了一个调整后编译了一个类似于QSQLite的SQLITECIPHER驱动,然后在sqlite3中预留的空实现sqlite3_key也予以实现加密的东西。详细的看一下源码以及作者的博客。
使用的话就相当简单了,因为驱动插件也进行了重写和编译,所以使用就和之前使用数据库是相同的,就是调用的驱动名不同了,然后需要设置一个密码:
然后在这个地方,setPassword调用的时候,如果数据库还没有建立,那么就是设置一个密码,如果数据库已经设定存在,那么就是使用这个密码来进行数据库的访问。这样就是对于数据库的一个基本的保护了。
后来去插件的作者的博客,还看到了比较详细的两篇的文章,这里也贴一下http://www.devbean.net/2012/07/qt-sqlite-plugin-with-encryption/,http://www.devbean.net/2013/01/qt-sqlite-plugin-with-encryption-v02/。
源码下下来包含了加密插件的源码还有一个测试的程序,首先需要修改sqlitecipher/qt_p.pri中对应的qt的代码位置,之后就可以编译sqlitecipher.pro项目了,编译debug和release后分别把生成的sqlitecipherd.dll 和sqlitecipher.dll 拷到对应的qt安装目录的sql驱动插件目录下plugins/sqldrivers下,就能在程序里进行使用了,使用测试程序先测试一下插件的运行请款就好了。
在这个插件中实现的其实就是实现了qtsqlitedriver的一个open的函数,添加了密码等参数,做了一个调整后编译了一个类似于QSQLite的SQLITECIPHER驱动,然后在sqlite3中预留的空实现sqlite3_key也予以实现加密的东西。详细的看一下源码以及作者的博客。
使用的话就相当简单了,因为驱动插件也进行了重写和编译,所以使用就和之前使用数据库是相同的,就是调用的驱动名不同了,然后需要设置一个密码:
QSqlDatabase dbconn = QSqlDatabase::addDatabase("SQLITECIPHER"); dbconn.setDatabaseName("../test.db"); dbconn.setPassword("psw"); if (!dbconn.open()) { qDebug() << "Can not open connection."; exit(CONNECTION_FAILED); }
然后在这个地方,setPassword调用的时候,如果数据库还没有建立,那么就是设置一个密码,如果数据库已经设定存在,那么就是使用这个密码来进行数据库的访问。这样就是对于数据库的一个基本的保护了。
相关文章推荐
- Android使用SQLCipher对SQLite数据库进行加密
- Android使用SQLCipher对SQLite数据库进行加密
- ROS_Kinetic_22 使用ROS的qt插件即ros_qtc_plugin实现Hi ROS!!!!
- JS使用插件cryptojs进行加密解密数据实例
- QT使用MySql的配置(使用addLibraryPath载入插件),编译QT的MySql驱动问题及解决方案(自己使用libmysql.lib进行编译mysql.pro,万不得已可以查看Makefile.Debug以解决问题)
- 使用 maven 插件 maven-shade-plugin 对可执行 java 工程及其全部依赖 jar 进行打包
- maven-shade-plugin 使用maven插件对java工程进行打包
- 使用iOS原生sqlite3框架对sqlite数据库进行操作
- ROS_Kinetic_22 使用ROS的qt插件即ros_qtc_plugin实现Hi ROS!!!!
- Java:如何使用Cipher类对字符串进行加密解密
- Android中使用SQLiteOpenHelper对SQLite数据库进行增删改查
- Qt使用异或进行加密解密
- PhoneGap,Cordova[3.5.0-0.2.6]:利用插件Cordova-SQLitePlugin来操作SQLite数据库
- ROS_Kinetic_22 使用ROS的qt插件即ros_qtc_plugin实现Hi ROS!!!!
- Qt使用AES加密算法对字符串进行加密
- Qt使用AES加密算法对字符串进行加密
- ant 中使用ant-Plugin插件进行文件的copy
- Java之——使用 maven 插件 maven-shade-plugin 对可执行 java 工程及其全部依赖 jar 进行打包
- 使用ros_qtc_plugin插件在QT中开发ROS
- 如何使用Qt插件在Qt中进行ROS开发