文档章节

使用wxSqlite3来解决sqlite加密问题zz

yoyoso
 yoyoso
发布于 2014/12/21 21:19
字数 572
阅读 2206
收藏 1

20141222更新:

最后还是没用wxSQLite3,而是使用了SQLCipher,感觉SQLCipher的文档写得好一些,可以参考这两个链接:http://www.cocoachina.com/industry/20140522/8517.htmlhttps://www.zetetic.net/sqlcipher/ios-tutorial/ 

-------------------

这里介绍一个开源项目:wxSQLite3,该项目是一个 SQLite 的 C++ warpper,它顺带将 SQLite 的加密函数实现了,并且它使用 AES 算法进行加密。你可以在http://sourceforge.net/projects/wxcode/files/Components/下 载到最新的包,在目录 \sqlite3\secure 下你可以找到一个 sqlite3.dll 文件,这个就是已编译的带加密的 SQLite 3 DLL 文件,而且 wxSQLite3 项目更新很快,你总是可以下载到较新的包。在最新的1.9.8版本中开始对256位AES加密进行实验,估计不久的版本就可以稳定使用。

使用起来也很简单,首先打开数据库 sqlite3_open,然后在操作数据库之前执行 sqlite3_key 后就可进行数据库操作,否则会返回错误。

sqlite3_key是输入密钥,如果数据库已加密必须先执行此函数并输入正确密钥才能进行操作,如果数据库没有加密,执行此函数后进行数据库操作反而会出现“此数据库已加密或不是一个数据库文件”的错误。

int sqlite3_key( sqlite3 *db, const void *pKey, int nKey),db 是指定数据库,pKey 是密钥,nKey 是密钥长度。例:sqlite3_key( db, “abc”, 3);

sqlite3_rekey 是变更密钥或给没有加密的数据库添加密钥或清空密钥,变更密钥或清空密钥前必须先正确执行 sqlite3_key。在正确执行 sqlite3_rekey 之后在 sqlite3_close 关闭数据库之前可以正常操作数据库,不需要再执行 sqlite3_key。

int sqlite3_rekey( sqlite3 *db, const void *pKey, int nKey),参数同上。

清空密钥为 sqlite3_rekey( db, NULL, 0)。

缺点:

严重依赖于wxWidgets C++ library。不利于发布,编译、维护繁琐。

参考:

android/ios SQLite数据库sqlcipher加密解密技术-几种解决方案分析比较wxSqlite3

本文转载自:http://blog.shouji-zhushou.com/androidiossqlite%E5%8A%A0%E5%AF%86%E8%A7%A3%E5%AF%86%E6%8A%80%E6%9...

yoyoso
粉丝 49
博文 130
码字总数 45527
作品 0
南京
高级程序员
私信 提问
Android数据库(sqlite)加密方案

最近因为一些项目的安全性需要将数据库加密,一开始想到的就是先将数据库通过AES加密,然后运行时再解密,另一种是将数据库里的内容加密。 很快这两种方案都是不理想的,第一种加密方式形同虚...

Leon李翊
2013/04/28
0
2
安卓应用安全指南 4.5.3 使用 SQLite 高级话题

安卓应用安全指南 4.5.3 使用 SQLite 高级话题 原书:Android Application Secure Design/Secure Coding Guidebook 译者:飞龙 协议:CC BY-NC-SA 4.0 4.5.3.1 在 SQL 语句的断言中使用通配符...

apachecn_飞龙
2018/03/22
0
0
SQLite 3.8.8 发布,数据库服务器

SQLite 3.8.8 发布,此版本是 SQLite 常规的维护版本,没有引人注目的新特性或者性能改进,只是不断的在改进。主要的性能提升是通过重构 B-Tree 重整逻辑来避免不必要的 memcpy() 操作。新特...

oschina
2015/01/17
3.8K
11
System.Data.SQLite的网友评论

System.Data.SQLite 是一个原始SQLite的加强版. 它将是一个原版的sqlite3.dll完全替代品 (你甚至就可以把它重命名为sqlite3.dll). 它不需要链接.NET 运行时,所以可以脱离.NET独立发布, 然而...

红薯
2009/12/11
1K
4
受 SQLite 多年青睐,C 语言到底好在哪儿?

SQLite 近日发表了一篇博文,解释了为什么多年来 SQLite 一直坚持用 C 语言来实现,以下是正文内容: C 语言是最佳选择 从2000年5月29日发布至今,SQLite 一直都是用 C 语言实现。C 一直是实...

王练
2018/08/31
5.3K
31

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周二乱弹 —— 你一辈子都不可能跟她这么亲近

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :#今日歌曲推荐# 分享George Benson的单曲《Six Play》: 《Six Play》- George Benson 手机党少年们想听歌,请使劲儿戳(这里) ...

小小编辑
24分钟前
100
4
优雅的关闭Spring Boot

优雅的关闭Spring Boot 1、实现 TomcatConnectorCustomizer 接口拿到Tomcat的连接获取 Tomcat连接池 2、实现 ApplicationListener<ContextClosedEvent> 监听服务器关闭事件,注册JVM钩子函数...

sowhat
今天
2
0
Python3-Web开发

简介 Web开发框架 什么是Web框架? Web应用程序框架或简单的Web框架表示一组库和模块,使Web应用程序开发人员能够编写应用程序,而不必担心协议,线程管理等低级细节。 virtualenv是一个虚拟...

wuxinshui
今天
4
0
使用技媒体实践编写发布博客

技媒体实践博客 CSDN OSChina 知乎 简书 思否 掘金 51CTO

晨猫
今天
2
0
Lucene

1、什么是全文检索 数据分类 我们生活中的数据总体分为两种:结构化数据和非结构化数据。 结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等。 非结构化数据:指不定长或无固...

榴莲黑芝麻糊
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部