写这篇文章的原因是之前接触到了关于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. Spring源码解析一:IOC容器设计

    一.IOC接口设计 IOC容器设计的源码主要在spring-beans.jar.spring-context.jar这两个包中.IOC容器主要接口设计如下: 这里的接口设计有两条主线:BeanFact ...

  2. java读取和写入txt文件

    package com.yinghuo.testDES; import java.io.BufferedReader;import java.io.BufferedWriter;import java ...

  3. yum的用法

    yum check-update 检查可更新的所有软件包 yum update 下载更新系统已安装的所有软件包 yum upgrade 大规模的版本升级,与yum update不同的是,连旧的淘汰的包 ...

  4. sql server数据库备份压缩拷贝实例

    --数据库备份压缩拷贝实例:前提要安装RAR压缩软件--声明变量declare @day varchar(10),@dbname varchar(20),@filename varchar(100), ...

  5. Android SDK教程

    Android SDK 网络问题解析 Android 客户端网络不稳定,会导致App 有时候无法及时收到 Push 消息. 很多开发者认为这是因为 JPush 推送不稳定.延迟,甚至有时候认为 JPu ...

  6. 手把手教你用Mysql-Cluster-7.5搭建数据库集群

    前言 当你的业务到达一定的当量,肯定需要一定数量的数据库来负载均衡你的数据库请求,我在之前的博客中已经说明了,如何实现负载均衡,但是还有一个问题就是数据同步,因为负载均衡的前提就是,各个服务器的数据库 ...

  7. div 宽高相等2种实现方式

    div.wh{ background:#ff0;width:50%;position:relative;display:inline-block; } div.wh:before{ content: ...

  8. 使用C#操作文件

    读写文本文件 使用C#读写文本文件需要5个步骤: 1.创建文件流 2.创建阅读器或者写入器 3.执行读写操作 4.关闭阅读器或者写入器 5.关闭文件流 例 using System; using Sy ...

  9. java Thread和Runable的深刻理解

    线程(Thread)是指程序的运行流程,多线程机制指同时运行多个程序块. Java中实现多线程有两种方法:继承Thread类:实现Runnable接口. Thread类的run()方法的制定者:接口R ...

  10. Java Stream API入门篇

    本文github地址 你可能还没意识到Java对函数式编程的重视程度,看看Java 8加入函数式编程扩充多少类就清楚了.Java 8之所以费这么大功夫引入函数式编程,原因有二: 代码简洁,函数式编程写 ...