写这篇文章的原因是之前接触到了关于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的使用总结(原创)的更多相关文章

  1. iOS开发 数据库FMDB

    iOS开发  数据库FMDB 1.简介 需求作用: 如果需要保存大量的结构较为复杂的数据时候, 使用数据库, 例如交规考试项目 常用的数据库: (1)Microsoft SQL Server 2000 ...

  2. iOS Sqlite加密(FMDB/SQLCipher)

    /** * 对数据库加密 * * @param path path description * * @return return value description */ + (BOOL)encryp ...

  3. IOS第三方数据库--FMDB 分类: ios技术 2015-03-01 09:38 57人阅读 评论(0) 收藏

    iOS中原生的SQLite API在使用上相当不友好,在使用时,非常不便.于是,就出现了一系列将SQLite API进行封装的库,例如FMDB.PlausibleDatabase.sqlitepers ...

  4. iOS中使用FMDB事务批量更新数据库

    今天比较闲看到大家在群里讨论关于数据库操作的问题,其中谈到了"事务"这个词,坦白讲虽然作为计算机专业的学生,在上学的时候确实知道存储过程.触发器.事务等等这些名词的概念,但是由于毕 ...

  5. IOS第三方数据库--FMDB

    iOS中原生的SQLite API在使用上相当不友好,在使用时,非常不便.于是,就出现了一系列将SQLite API进行封装的库,例如FMDB.PlausibleDatabase.sqlitepers ...

  6. iOS 数据持久化-- FMDB

    一.简介 1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 2.FMDB的优点 使用起来更加面向对象,省去了很多麻烦.冗余的C语言 ...

  7. iOS开发中FMDB的使用

    1.什在日常的开发中,我们需要用到离线缓存将数据信息存入数据库,在没有网络的时候进行加载,而我们IOS用的就是sqlite3数据库,用原生的sql我们也能实现,但是书写起来比较麻烦,尤其是其它语言转过 ...

  8. iOS开发之--FMDB的使用

    在很多时候,我们会用到数据库,我们移动端使用的数据库,一般都是嵌入型数据库,是一种较轻型的数据库, 一般很多时候,大牛封装的FMDB的第三方,已经足够满足我们的需求了! 现在分享一下自己的学习心得,希 ...

  9. iOS开发数据库-FMDB

    前言 FMDB是以OC的方式封装了SQLite的C语言API,使用起来更加面向对象,省去了很多麻烦.冗余的C语言代码:对比苹果自带的Core Data框架,更加轻量级和灵活:提供了多线程安全的数据库操 ...

随机推荐

  1. oracle按某个字段分组然后从每组取出最大的一条纪录

    需求:查询各个设备存在未消缺的缺陷,取缺陷等级最高的,作为这个设备当前的缺陷等级: 数据源: select t.device_id, t.defect_level from sp_pd_defect ...

  2. 每天一个linux命令(56)--crontab命令

    上一节学习了 at  命令是针对仅运行一次的任务,循环运行的例行性计划任务,Linux 系统则是由 cron(crond)这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工作,因此这个 ...

  3. java线程学习(一)

    1.简介 java基础知识部分线程创建的三种方式.线程执行的样例. 代码地址:http://git.oschina.net/blue_phantom/javaj 包位置:package com.blu ...

  4. appium初学者,使用之检查appium环境报错Could not detect Mac OS X Version from sw_vers output: '10.12.1’,

    这个问题存在的原因就是appium不兼容最新的mac10.12版本. 由于10.12是最新mac版本,appium1.5.3并未提供支持,所以: 在终端输入grep -rl "Could n ...

  5. ER图是啥?

    文章转载自「开发者圆桌」一个关于开发者入门.进阶.踩坑的微信公众号 E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型.属性和联系的方法,用来描述现 ...

  6. 超出父视图无法点击问题hitTest

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #c91b13 } p.p2 { margin: 0.0px 0. ...

  7. WPF: 在 MVVM 设计中实现对 ListViewItem 双击事件的响应

    ListView 控件最常用的事件是 SelectionChanged:如果采用 MVVM 模式来设计 WPF 应用,通常,我们可以使用行为(如 InvokeCommandAction)并结合命令来实 ...

  8. LKNotification控件-通知控件

    通知控件 项目介绍: 一个通知控件,长得很像iOS系统的通知栏弹出时候的样式.可以多个通知覆盖.引入项目之后,只需调用一行代码即可 [Java] 查看源文件 复制代码 ? 1 LKNotificati ...

  9. ###Intent的使用(活动中穿梭)

    让活动切换有两种方式 显示意图和隐式意图 显示意图:只能在本应用中穿梭: 隐式意图:可以调用其他应用程序的活动,包括系统应用,但是需要配置清单文件 显式Intent 1) 创建一个新的活动 2) 确定 ...

  10. ArrayList去除重复元素(包括字符串和自定义对象)

    1.去除重复字符串 package com.online.msym; import java.util.ArrayList; import java.util.Iterator; @SuppressW ...