(iOS)sqlcipher和FMDB的使用总结(原创)
写这篇文章的原因是之前接触到了关于sqlite数据库加密的问题,一般数据库加密,无非是数据加密和数据库文件加密,当然数据库文件加密对手机效率可能更高一些。
下面就讲一下,自己对sqlcipher和fmdb的使用心得。
1.Sqlcipher是一个很有名的库,它的主要作用是对sqlite数据库操作,其中一个很重要的就是加密、解密处理。它支持ios、android、wp8、mac os等, 它连接:http://sqlcipher.net。
配置sqlcipher库
关于Sqlcipher在ios工程的配置过程,推荐一篇blog(http://blog.csdn.net/kuai0705/article/details/8931996#reply),我是照着他的配置的,我就不粘贴了。当然官网也有配置过程。不过我按照官网的配置,没有成功,官网写的比较简单,初学者可能会遗漏东西,比如openssl。
使用sqlcipher库
sqlcipher提供了sqlite数据库各种操作方法。这里说几个注意的地方,sqlcipher的加/解密方法sqlite3_key在它的实现文件sqlite3.c(吐槽一下,一个文件写了14万+行代码...)中加了#ifdef指令(不止这一处),所以要想加/解密成功,在你调用sqlite3_key等类似方法的文件中加上相关的#define。上面的配置中有一项other c flag的配置(-DSQLITE...),在我这好像不起作用,所以我直接在文件中加的。
下面对sqlcipher的几个基本方法进行解释:
sqlite3_open,是指打开数据库,如果数据库不存在,就会创建这个数据库(前提要存在这个路径)。
sqlite3_key,是指对打开的数据库进行加密(新的数据库)或者解密(需要解密的数据库),在数据库关闭之前,这个方法只能使用一次。
sqlite3_rekey,是指对加密的数据库进行更改密码,它的使用前提是进行了sqlite3_key方法并且成功了,rekey方法的使用不限制次数。
sqlite3_exec,是对数据库操作方法。
2.FMDB是对sqlite数据库操作封装的很不错的数据库,而且它也增加了对sqlcipher的支持,也就是说,我们不直接用sqlcihper也能完成加解密操作,而且FMDB在操作sqlite方面方便得多。
配置FMDB库
关于FMDB的配置过程,推荐一篇博文(http://blog.devtang.com/blog/2012/04/22/use-fmdb),他写好了关于fmdb的配置和简单实用。
使用FMDB
在使用方面,如果要实现fmdb加解密效果,你的工程也要配置好sqlcihper,关于FMDB的类和方法我就不说了,推荐的博文里面有。
在这里有几个注意点,关于FMResultSet,fmdb为他定义了迭代器功能,所以你想获取result里面的值,要先执行[result next]。
加密之后的数据库文件,在别的数据库管理软件是不一定能打开的,即使你知道密码,因为sqlcihper和你的数据库管理软件并不一定是用的是一套加解密机制。
有问题请留言,尽量回答。
(iOS)sqlcipher和FMDB的使用总结(原创)的更多相关文章
- iOS开发 数据库FMDB
iOS开发 数据库FMDB 1.简介 需求作用: 如果需要保存大量的结构较为复杂的数据时候, 使用数据库, 例如交规考试项目 常用的数据库: (1)Microsoft SQL Server 2000 ...
- iOS Sqlite加密(FMDB/SQLCipher)
/** * 对数据库加密 * * @param path path description * * @return return value description */ + (BOOL)encryp ...
- IOS第三方数据库--FMDB 分类: ios技术 2015-03-01 09:38 57人阅读 评论(0) 收藏
iOS中原生的SQLite API在使用上相当不友好,在使用时,非常不便.于是,就出现了一系列将SQLite API进行封装的库,例如FMDB.PlausibleDatabase.sqlitepers ...
- iOS中使用FMDB事务批量更新数据库
今天比较闲看到大家在群里讨论关于数据库操作的问题,其中谈到了"事务"这个词,坦白讲虽然作为计算机专业的学生,在上学的时候确实知道存储过程.触发器.事务等等这些名词的概念,但是由于毕 ...
- IOS第三方数据库--FMDB
iOS中原生的SQLite API在使用上相当不友好,在使用时,非常不便.于是,就出现了一系列将SQLite API进行封装的库,例如FMDB.PlausibleDatabase.sqlitepers ...
- iOS 数据持久化-- FMDB
一.简介 1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 2.FMDB的优点 使用起来更加面向对象,省去了很多麻烦.冗余的C语言 ...
- iOS开发中FMDB的使用
1.什在日常的开发中,我们需要用到离线缓存将数据信息存入数据库,在没有网络的时候进行加载,而我们IOS用的就是sqlite3数据库,用原生的sql我们也能实现,但是书写起来比较麻烦,尤其是其它语言转过 ...
- iOS开发之--FMDB的使用
在很多时候,我们会用到数据库,我们移动端使用的数据库,一般都是嵌入型数据库,是一种较轻型的数据库, 一般很多时候,大牛封装的FMDB的第三方,已经足够满足我们的需求了! 现在分享一下自己的学习心得,希 ...
- iOS开发数据库-FMDB
前言 FMDB是以OC的方式封装了SQLite的C语言API,使用起来更加面向对象,省去了很多麻烦.冗余的C语言代码:对比苹果自带的Core Data框架,更加轻量级和灵活:提供了多线程安全的数据库操 ...
随机推荐
- Mysql动态sql语句,用当前时间做表名
在mysql备份操作中, 我们可能要使用表名和当前时间来做为备份表的名称,但是MySQL在存储过程中不支持使用变量名来做表名或者列名. 例如:有一个表"user",我需要备份一份, ...
- Handlebars模板引擎之上手
handlebars Handlebars,一个JavaScript模板引擎,是基于Mustache的扩展.模板引擎的都存在一个上下文环境,这是它的作用区间. 需求:基本使用 需要的库 <scr ...
- redhat linux enterprise 5 输入ifconfig无效的解决方法
redhat linux enterprise 5 输入ifconfig无效的解决方法 在安装完成linux后,进入终端,输入命令行ifconfig,会提示bash: ifconfig: comm ...
- perl open函数
open(DATA, "<file.txt"); # <只读打开file.txt ,DATA作为句柄 open(DATA, ">file.txt&quo ...
- DOM基础(三)
对于DOM来说,知识点其实并不多,要理解DOM并不难,难的是会用.可能有的人看见DOM获取元素要这么长一串单词就觉得生无可恋了.不过说实在的,如果你能理解他的意思跟用法.而且稍微再有点英语基础的话,D ...
- jquery事件与绑定事件
1.首先,我们来看一下经常使用的添加事件的方式: <input type="button" id="btn" value="click me!& ...
- Struts2中的配置文件的加载
Struts2框架配置文件加载顺序(服务器启动之后, 这些配置文件会按照顺序一一加载进内存, 进行类等匹配的时候才会去内存查找): 1. default.properties 2. str ...
- UINavigationBar统一修改导航条样式
#pragma mark -- 统一导航条样式 //统一导航条样式 UIFont *font = [UIFont systemFontOfSize:19.f]; NSDictionary *textA ...
- SQL server 数据库(视图、事物、分离附加、备份还原))
ql Server系列:视图.事物.备份还原.分离附加 视图是数据库中的一种虚拟表,与真实的表一样,视图包含一系列带有名称的行和列数据.行和列数据用来自定义视图的查询所引用的表,并且在引用视图时动态 ...
- FastCGI超过活动超时时间
线上环境:PHP5.4 and IIS 打开IIS管理器,找到FastCGI,打开后编辑选项 活动超时默认为70(秒) 请求超时默认为90(秒) 可根据项目需求来更改这两项的值