VC++下的sqlite数据库加密

VC++下的sqlite数据库加密


    我发现我的报告和其他人比略显低端……这里使用AES加密sqlite数据库,但加密的代码看不懂,只知道怎么用……

    SQLite开源的代码里没有实现加密的功能,但是在头文件中声明了sqlite3_key和sqlite3_rekey两个函数,实现这两个函数即可加密数据库。直接让数据暴露在notepad下让我一直耿耿于怀。但鉴于水平太臭,没得法,又找了个开源的项目,它把sqlite的加密实现了。 http://sourceforge.net/projects/wxcode/files/Components/     下面有个wxSQLITE3,这就是实现了加密的sqlite的源码。下载下来在sqlite3\secure里面有AES256和128位加密的版本。我直接取出AES256版本中的sqlite3.dll和sqlite3.lib。     拷贝到我使用sqlite的工程目录下,动态链接库怎么用这个就怎么用。

    使用加密功能前先定义一下SQLITE_HAS_CODEC,大家读sqlite3.h就知道为什么了。定义如下(请放在所有代码的最前面,至少放在#include "sqlite3.h"前面):

    #ifndef SQLITE_HAS_CODEC

    #define SQLITE_HAS_CODEC

    #endif


    只具体讲一下加密的函数:       SQLITE_API int sqlite3_key(           sqlite3 *db,                   /* Database to be rekeyed */           const void *pKey, int nKey     /* The key */         );     第一个参数是数据库句柄,第二个参数是密码,第三个参数是密码的长度。在sqlite3_open函数后调用,也就是打开数据库以后调用。     1.如果原数据库没有加密,调用此函数则加密数据库。     2.如果原数据库已加密,此函数相当于一个“钥匙”,打开数据库后,不调用此函数或密码不正确就不能操作数据库。

    这里说一下,实践证明,欲加密数据库,在建立表之前请调用此函数。也就是说最好把该语句就放在sqlite3_open后面。否则可能加密不成。

    还要说明一下,如果已调用sqlite3_close关闭了数据库,再次打开时,还是要调用sqlite3_key,此时相当于功能2.

    最后说明一下,加了密的数据库操作和没加密一样。也就是说你只需要把sqlite3_key函数加到代码里,其他的什么都不用改。

    另一个函数:

        SQLITE_API int sqlite3_rekey(           sqlite3 *db,                   /* Database to be rekeyed */           const void *pKey, int nKey     /* The new key */         );

    参数说明和刚才一样,作用是更改密码。很简单就不多说了。不过打开一个加密的数据库,先要调用sqlite3_key,再才能用sqlite3_rekey改密码。相当于要输入原密码才能修改密码,否则不会成功。

    还有,如果第二个参数或第三个参数为NULL(0),则是删除密码,也就是解密。


    演示:

    一个数据库文件不加密前,用Notepad++打开,可以看到数据和sql语句:

    加密后,乱码了:

    其他一切使用正常:


    如果大家有心,可以去读读代码,看看加密的过程具体是怎么实现

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • sqlite3的C语言使用(一)

    前一天我讲了如何在VC中连接sqlite的库,从今天开始就分几个专题详细学习一下sqlite的一些API。当然我也是才接触sqlite3,这些题也都是我的作业题...

    phith0n
  • sqlite3的C语言使用(三)

    估计这是sqlite系列最后一篇,sqlite的基本功能这一篇写完了就应该差不多了,不过还有更多高级功能大家可以自己去发现。上一篇

    phith0n
  • 宝塔面板phpMyAdmin未授权访问漏洞是个低级错误吗?

    周日晚,某群里突然发布了一则消息,宝塔面板的phpmyadmin存在未授权访问漏洞的紧急漏洞预警,并给出了一大批存在漏洞的URL:

    phith0n
  • mysql数据库基础语法

    说到数据库语法,需要先提一下数据库表,数据库语法操作的就是数据库的表。一个数据库通常包含一个或多个表。每个表由一个名字标识(例如“客户”或者“订单”)。表包含带...

    无邪Z
  • 完全图解 HTTPS

    我们先来看下数据在互联网上数据传递可能会出现的三个比较有代表性的问题,其实后面提到的所有方法,都是围绕解决这三个问题而提出来的。

    sunsky
  • 音视频防爬技术

    小编团队多年的技术服务中沉淀了一些音视频加密的经验,对于在线教育平台的音视频加密提供一些知识了解和交流

    点量小崔
  • Qt多线程编程实战:MD5单项加密

    现在的加密/解密技术主要有三种:对称加密,非对称加密,和单向加密,这三种加密解密技术的组合就是现在电子商务的基础,它们三个有各自最适合的领域

    DeROy
  • https原理

      先来说下对称加密和非对称加密,对称加密就是当在对信息进行加密和解密时使用的秘钥是同一个秘钥,对称加密的优点是效率高但是相对不安全;非对称加密秘钥分为公钥和私...

    码缘
  • 如何限制网站的视频被下载播放?

    即便视频通过一机一码加密工具加密,还是觉的通过网盘、邮箱等给学员或用户传送加密视频太麻烦?想让学员不用下载加密视频本地存储就实现在线观看?这种情况均可以通过搭建...

    IPTV OTT
  • HDFS系统详解

    每个文件都是由一个一个的Block组成(Block默认大小128M),例如一个300M的文件会被保存成3个Block,而一个3K的文件也统一会占用一个Block...

    俺也想起舞

扫码关注云+社区

领取腾讯云代金券