`
dqifa
  • 浏览: 116405 次
社区版块
存档分类
最新评论

在CodeBlocks中编译带加密的sqlite3,并利用CppSQLite3操纵sqlite3

阅读更多

近来在学习CodeBlockswxWidgets,网上有人说要操纵sqlite3使用wxSqlite比较好,实现了加密,于是我就按照他们的方法一步步实现,在编译wxSqlitesqlite3的过程中虽说出现一些小插曲,但总算是都编译通过了,最让我头大的是用wxSqlite操纵sqlite3时出现一堆错误,痛苦一天之后决定放弃了(谁可以指导一下,感激不尽),还是转到我比较熟悉的CppSQLite3。但是我发现新版的CppSQLite3.2没有提供加密接口,于是我就想到将以前版本的接口函数移植到新版中来,试了一下,还可以,在此写几笔,以备查询。

 

一、静态编译带加密的sqlite3

 

1、下载sqlite-amalgamation-3071300(下载地址:http://www.sqlite.org/download.html

2、打开CodeBlocks,新建Static library,项目标题为Sqlite3Encrypt,其他默认即可。

3、解压sqlite-amalgamation-3071300到某个位置,并将文件夹内所有的文件拷贝到Sqlite3Encrypt工程目录里。

4、下载wxsqlite3(下载地址:http://wxcode.sourceforge.net/components/wxsqlite3/),解压(我解压的位置为G:\wxSqlite3),并将G:\wxSqlite3\wxsqlite3-3.0.0\sqlite3\secure\src内的codec.ccodec.hrijndael.crijndael.hcodecext.csqlite3secure.c拷贝到Sqlite3Encrypt工程目录里面,在Sqlite3Encrypt工程里添加sqlite3secure.c文件。

5、添加预处理:

Sqlite3Encrypt上点击右键-属性,弹出对话框,配置如图:

图片

 

点击构建选项,配置如图:

图片

 

SQLITE_HAS_CODEC=1

CODEC_TYPE=CODEC_TYPE_AES128

SQLITE_CORE

THREADSAFE

SQLITE_SECURE_DELETE

SQLITE_SOUNDEX

SQLITE_ENABLE_COLUMN_METADATA

点击确定退出设置。

6、编译Sqlite3Encrypt,不出意外的话,就会生成libSqlite3Encrypt.a,即为带加密的sqlite静态库。编译过程中如果出现error: too few arguments to function 'sqlite3BtreeRollback'的错误,就将sqlite3BtreeRollback(pbt)更改为sqlite3BtreeRollback(pbt,SQLITE_OK)并保存、重新编译,即会消除错误。

 

二、为CppSQLite3.2添加加密接口(CppSQLite3.2下载地址:

http://www.codeproject.com/Articles/6343/CppSQLite-C-Wrapper-for-SQLite

 

1、在CppSQLite3.hCppSQLite3DB类中添加如下函数声明:

class CppSQLite3DB

{

public:

    CppSQLite3DB();

    virtual ~CppSQLite3DB();

    void open(const char* szFile);

    void open(const char* szFile, const char* szPass);

    void rekey(const char* szPass);

void close();

………………………………

2、在CppSQLite3.cpp中添加上述函数的实现:

………………………………

void CppSQLite3DB::open(const char* szFile)

{

      int nRet = sqlite3_open(szFile, &mpDB);

 

      if (nRet != SQLITE_OK)

      {

           const char* szError = sqlite3_errmsg(mpDB);

           throw CppSQLite3Exception(nRet, (char*)szError, DONT_DELETE_MSG);

      }

 

      setBusyTimeout(mnBusyTimeoutMs);

}

 

void CppSQLite3DB::open(const char* szFile,const char* szPass)

{

      int nRet = sqlite3_open(szFile, &mpDB);

 

      if (nRet != SQLITE_OK)

      {

           const char* szError = sqlite3_errmsg(mpDB);

           throw CppSQLite3Exception(nRet, (char*)szError, DONT_DELETE_MSG);

      }

      if(szPass != NULL)

      {

           int nRet = sqlite3_key(mpDB, szPass, strlen(szPass));

 

           if (nRet != SQLITE_OK)

           {

                 const char* szError = sqlite3_errmsg(mpDB);

                 throw CppSQLite3Exception(nRet, (char*)szError, DONT_DELETE_MSG);

           }

      }

 

      setBusyTimeout(mnBusyTimeoutMs);

}

 

void CppSQLite3DB::rekey(const char* szPass)

{

      if(szPass != NULL)

      {

           int nRet = sqlite3_rekey(mpDB, szPass, strlen(szPass));

 

           if (nRet != SQLITE_OK)

           {

                 const char* szError = sqlite3_errmsg(mpDB);

                 throw CppSQLite3Exception(nRet, (char*)szError, DONT_DELETE_MSG);

           }

      }

      setBusyTimeout(mnBusyTimeoutMs);

}

………………………………

 

三、用CppSQLite3.2操纵libSqlite3Encrypt

 

在下载CppSQLite3.2时,里面有CppSQLite3.2的使用实例,如:CppSQLiteDemo

打开数据库可以用:

db.open("数据库路径+名称");   //不带加密方式打开数据库

db.open("数据库路径+名称","密码");  //带加密的方式打开

修改密码可以用:

db.rekey("密码"); //修改密码

 

 

参考:http://topic.csdn.net/u/20111030/13/e794f504-5d6a-4b5e-86e0-20977349814b.html

分享到:
评论

相关推荐

    LittleVGL CodeBlocks模拟器编译成功的库和工程包

    《LittleVGL在CodeBlocks模拟器中的编译与应用》 LittleVGL是一款开源的图形库,专为嵌入式设备设计,用于构建图形用户界面(GUI)。它提供了丰富的图形元素,如按钮、滑块、图表等,以及动画效果,使得在小型设备...

    Linux下使用codeblocks交叉编译ARM-LINUX-GCC程序

    在这个资源中,我们将学习如何使用 CodeBlocks 在 Linux 平台下交叉编译 ARM-LINUX-GCC 程序。交叉编译是一种在不同的平台之间编译代码的技术,能让开发者在不同的硬件架构上开发和运行程序。ARM-LINUX-GCC 是一种...

    CodeBlocks编译环境介绍

    在安装过程中,可以选择安装MinGW编译器以便可以直接在Code::Blocks中编译C/C++代码。 3. **卸载旧版本**:如果之前已经安装过其他版本的Code::Blocks,在安装新版本之前建议先卸载旧版本,以免出现冲突。 #### 六...

    Codeblocks编译环境和调试无法调试问题解决方案.docx

    然而,在使用Codeblocks时,很多用户都遇到了编译环境出错和调试无法调试的问题。本文将详细介绍如何解决这些问题。 一、编译环境出错问题解决方案 在使用Codeblocks时,可能会出现编译环境出错的问题,这是因为...

    CodeBlocks Socket通信 交叉编译

    在CodeBlocks中实现Socket通信的交叉编译,首先需要确保你有合适的交叉编译工具链,例如MinGW-w64,它可以用于构建针对不同架构的Linux程序。 具体步骤如下: 1. **设置交叉编译工具链**:在CodeBlocks中,打开...

    CodeBlocks运行编译器解决程序无法编译的问题

    然而,有时候在安装CodeBlocks后,用户可能会遇到无法编译程序的问题,这通常是由于缺少了必要的编译器组件——GCC(GNU Compiler Collection)导致的。 GCC是GNU项目的一部分,它包括了C、C++、Objective-C、...

    Codeblocks+wxWidgets安装及编译.doc

    Codeblocks+wxWidgets安装及编译

    sqlite 扩展函数(源码)

    在使用CodeBlocks和MinGW编译这些源码时,首先需要确保安装了SQLite的开发库。然后在CodeBlocks项目中,将这些源文件加入到工程,并配置好编译器选项。编译完成后,生成的动态库文件(.dll)可以链接到需要使用...

    使用CODEBLOCKS编译VTK

    在本教程中,我们将学习如何使用CodeBlocks编译VTK。VTK(The Visualization Toolkit)是一款开源的数据可视化工具包,广泛应用于科学计算、数据分析和可视化领域。CodeBlocks是一款自由开源的集成开发环境(IDE),...

    Codeblocks下编译opencv为动态链接库供labview调用

    3. 配置 Codeblocks:在 Codeblocks 中,选择“设置”->“编译器和调试器”,然后选择“gnu gcc 编译器”,并将 Opencv 的安装目录添加到“包含目录”中。 二、创建动态链接库工程 在配置了 Opencv 环境后,我们...

    codeblocks编译qrc示例程序

    在CodeBlocks中,可以创建一个新的Qt项目,选择“Empty Project”模板,然后添加所需的源代码和资源文件。 QRC文件通常以`.qrc`为扩展名,它定义了一个XML格式的树状结构,用于组织项目中的资源。例如: ```xml ...

    使用codeblocks编译新版x264

    ### 使用CodeBlocks编译新版x264 #### 背景介绍 X264是一款高质量、高性能的H.264/MPEG-4 AVC编码器,广泛应用于视频流媒体传输、视频会议以及视频存储等领域。对于开发人员来说,能够熟练地编译并使用x264是非常...

    CodeBlocks 安装包(编译工具)

    Codeblocks是一个开源的集成开发环境(IDE),用于编写、编译和调试各种编程语言的程序。它是一个跨平台的开发工具,支持多种操作系统,包括Windows、Mac OS和Linux。Codeblocks为程序员提供了一种方便、易于使用的...

    C++操作sqlite数据库

    其次,需要下载api头文件sqlite3.h,并将其添加到库文件中,添加到CodeBlocks\MinGW\include目录下。 新建数据库和表是使用C++操作sqlite数据库的基本步骤之一。首先,需要创建一个名为student.db的数据库,然后...

    codeblocks中文语言包

    1. 找到CodeBlocks的安装目录,通常在Windows系统中位于"C:\Program Files\CodeBlocks"。 2. 进入"share\codeblocks\locale"目录,这里存放着CodeBlocks的各种语言文件。 3. 备份原有的英文语言文件,通常名为...

    codeblocks-17.12自带mingw

    在CodeBlocks 17.12中集成MinGW意味着用户可以直接在IDE内部编译和运行程序,无需单独下载和配置编译器。这极大地简化了初学者的学习过程,同时也为专业开发者提供了一站式的开发解决方案。 在使用CodeBlocks 17.12...

    运用MinGW和CodeBlocks在Windows上编译wxWidgets及使用

    本指南将详细介绍如何利用MinGW(Minimalist GNU for Windows)和Code::Blocks集成开发环境(IDE)在Windows上编译和使用wxWidgets库。 ### 1. wxWidgets简介 **1.1 wxWidgets版本** wxWidgets库有多个版本,每个...

Global site tag (gtag.js) - Google Analytics