最近因为工作原因,需要使用sqlite数据库。sqlite数据库小并且使用方便,感觉挺不错的。但有一个不足就是没有对数据库进行加密,不过好的是sqlite预留有加密的接口,我们可以直接调用即可。我也是参考网上的资料对数据库进行加密:
sqlite数据库默认没有加密功能,对一些需要对工程文件进行保密的场合产生了不便,本文以QT4.4.3为例,
对qt源代码中的sql模块进行修改,为qt集成的sqlite数据库添加了加密功能.
1. /wxsqlite3_prj/sqlite3目录 下的文件进行编译生成 sqlite3.lib
2 将 sqlite3.h 和 上一步骤生成的sqlite3.lib 拷贝到目录 ?:\Qt\4.4.3\src\plugins\sqldrivers\sqlite 中.
3 将 ?:\Qt\4.4.3\src\plugins\sqldrivers\sqlite 目录下的sqlite.pro文件修改为:
TARGET = qsqlite
# 不使用qt自带的sqilte源码文件,而是使用外部生成的库
win32:LIBS += sqlite3.lib
#
HEADERS = ../../../sql/drivers/sqlite/qsql_sqlite.h
SOURCES = smain.cpp \
../../../sql/drivers/sqlite/qsql_sqlite.cpp
!system-sqlite:!contains( LIBS, .*sqlite.* ) {
CONFIG(release, debug|release):DEFINES *= NDEBUG
DEFINES += SQLITE_CORE SQLITE_OMIT_LOAD_EXTENSION SQLITE_OMIT_COMPLETE
# INCLUDEPATH += ../../../3rdparty/sqlite
# SOURCES += ../../../3rdparty/sqlite/sqlite3.c
} else {
LIBS *= $$QT_LFLAGS_SQLITE
QMAKE_CXXFLAGS *= $$QT_CFLAGS_SQLITE
}
include(../qsqldriverbase.pri)
4 修改 ?:\Qt\4.4.3\src\sql\drivers\sqlite 目录下的文件 qsql_sqlite.cpp
需要修改的函数 bool QSQLiteDriver::open(),函数体修改为:
bool QSQLiteDriver::open(const QString & db, const QString &, const QString &, const QString &, int, const QString &conOpts)
{
if (isOpen())
close();
if (db.isEmpty())
return false;
if (sqlite3_open16(db.constData(), &d->access) == SQLITE_OK) {
sqlite3_busy_timeout(d->access, qGetSqliteTimeout(conOpts));
setOpen(true);
setOpenError(false);
//添加加密功能 "Trucc"为加密密匙,5为密匙长度
sqlite3_key( d->access, "Trucc", 5);
return true;
} else {
setLastError(qMakeError(d->access, tr("Error opening database"),
QSqlError::ConnectionError));
setOpenError(true);
return false;
}
}
5 编译 ?:\Qt\4.4.3\src\plugins\sqldrivers\sqlite 下的工程, 在目录 ?:\Qt\4.4.3\plugins\sqldrivers 中生成添加加密功能的sqlite
相应库文件.
摘自:http://apps.hi.baidu.com/share/detail/21604459
可当我编译到最后一步的时候,出现了‘sqlite3_key’ was not declared in this scope 的错误信息,我死活不知道为啥,只出现这个错误,sqlite3.h文件也已经进行了引入,可为啥还是出错呢?今天静下心来,阅读sqlite3.h文件的sqlite3_key函数,发现在它的上面有一句
#ifdef SQLITE_HAS_CODEC
我突然若有所思,这句话的意思不就是如果定义了SQLITE_HAS_CODEC才可以使用sqlite3_key函数嘛。既然这样,我们只要在提出错误的文件中进行定义即可。这样我将出现找不到sqlite3_key函数的qsql_sqlite.cpp文件头部加上:
#if defined SQLITE_HAS_CODEC
在文件的末尾加上:
#endif
重新进行编译,编译通过。
看来遇到问题,还是要就下心来。慢慢的,细心的分析,相信问题总能解决的。
 

sqlite3加密的更多相关文章

  1. sqlite3加密支持

    sqlite3加密支持 sqlite3免费版并不支持加密,不过留有接口,有不少开源的加密实现,不过有的需要使用openssl配置略显繁琐,不过使用wxsqlite比较方便. wxSqlite3 wxS ...

  2. cocos2d-x 下使用加密 sqlite3

    sqlite3 加密库用的是wxsqlite3-3.0.0.1 提取出来的, 在android 下測试通过,无异常 编译时仅仅须要编译  sqlite3secure.c  此文件,即能够成功.測试时生 ...

  3. SQLite XXTea加密学习

    这几天优化数据库读写,移植了xxtea加密到最新的数据库sqlite 3.12.2里,一些好文章放在这里.移植后,数据库读写性能异常优秀! 这几天又发现,数据库还是发生了无法写入情况,数据库崩溃掉了. ...

  4. ios swift版 sqlite3详解

    iOS中的SQLite3的封装与详细应用 SQLite是一个开源的嵌入式关系数据库,特点是易使用.高效.安全可靠.可移植性强. iOS中的本地持久化存储 NSUserDefault:一般用于存储小规模 ...

  5. Android 天猫apk聊天数据库解密

    1.使用Android 天猫apk 进行聊天会产生tmallWangXinDB的数据库.2.用sqlite3 工具打开提示加密或者错误.3.需要对该数据库进行解密. 解密流程:1.反编译apk,dex ...

  6. delphi Sqlite

    Delphi中SQLite如何读写二进制字段(Blob类型) 在Delphi中,有大量的组件可以操作SQLite数据库,如UniDAC就是其中一个比较优秀的,当然还有ASQLite3Component ...

  7. IOS 使用wxsqlite3为sqlite3数据库加密

    1,下载wxsqlite3 地址http://jaist.dl.sourceforge.net/project/wxcode/Components/wxSQLite3/wxsqlite3-3.1.1. ...

  8. Cocos2dx使用wxsqlite开源加密SQLite3数据库

    最近使用wxsqlite加密sqlite3数据库,刚开始折腾好几天,在xcode上一直编译不通过,后来在sqlite3.c找到配置,编译顺利通过,太激动了,哈哈,废话少说!总结一下android和io ...

  9. ARX项目中添加开源数据库SQLite3 的加密开源库wxsqlite3

    RX添加wxsqlite3加密数据库, 下载 https://sourceforge.net/projects/wxcode/files/Components/wxSQLite3/ 复制这11个文件到 ...

随机推荐

  1. 20140309 C++ using 野指针 返回变量首地址

    1.C++中的using:http://blog.sina.com.cn/s/blog_61e904fd0100nuk3.html 使用using恢复.改变被继承类中的访问权限 2.野指针,没有指向的 ...

  2. SpringMVC(day1搭建SpringWebMvc项目)

    MVC和webMVC的区别 Model(模型) 数据模型,提供要展示的数据,因此包含数据和行为,行为是用来处理这些数据的.不过现在一般都分离开来:Value Object(数据) 和 服务层(行为). ...

  3. Python-docx库的使用

    from docx import Document from docx.shared import Inches document = Document() document.add_heading( ...

  4. Number Sequence /// oj21456

    题目大意: 有一组规律数 the first 80 digits of the sequence are as follows: 1 12 123 1234 12345 123456 1234567 ...

  5. 关于__init__.py

    假设程序目录结构如下: ├── checkpoints/ ├── data/ │ ├── __init__.py │ ├── dataset.py │ └── get_data.sh ├── mode ...

  6. PyQt5 安装及简单实例 -- 标签设置

    - 1 -    PyQt5安装,鉴于pip工具,安装其实很简单, 如下:(最好将pip索引配置成国内镜像,速度比默认的快得多) pip3 isntall PyQt5 - 2 -    利用Pycha ...

  7. iOS开发系列-Category

    Category Category是OC中特有的语法.Category的作用 * 可以在不修改原来类的基础上,为这个类扩充一些方法 * 一个庞大的类可以分为多个模块开发 * 一个庞大的类可以由多个人来 ...

  8. 2019-8-31-C#-直接创建多个类和使用反射创建类的性能

    title author date CreateTime categories C# 直接创建多个类和使用反射创建类的性能 lindexi 2019-08-31 16:55:58 +0800 2018 ...

  9. JS去除字符串拼接末尾的符号(逗号)

    前言:在JS中,有时需要进行字符串的拼接,而拼接的字符串以某种符号分隔,在拼接好的字符串末尾会多出一个分隔符,这时我们可以采取以下几种方法来去除末尾的分隔符. 方法一:使用substring()  和 ...

  10. css---7自定义字体

    1.Adobe illustrator AI是一种应用于出版.多媒体和在线图像的工业标准矢量插画的软件,是一款非常好的矢量图形处理工具. 该软件主要应用于印刷出版.海报书籍排版.专业插画.多媒体图像处 ...