写这篇文章的原因是之前接触到了关于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. Android N特性解析

    作者:Redyan, 腾讯移动客户端开发工程师 商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. 原文链接:http://wetest.qq.com/lab/view/288.html ...

  2. MobileOA第一期总结

    MobileOA第一期总结 前段时间一直没有更新博客,好想给自己找个借口---恩,我还是多找几个吧.毕业论文.毕业照,再感伤一下,出去玩一下,不知不觉就过去几个月了.然后上个月底才重新回到学习之路,从 ...

  3. 在.NET Core控制台应用程序中使用强类型配置

    想象一下,你写一个控制台应用程序,你想要从配置文件中以强类型方式读取配置. .NET Core 可以帮助我们解决. 通常我会在ASP.NET Core MVC中演示,但简单起见,只在控制台应用程序中演 ...

  4. 架构师之路——里氏替换原则LSP

    定义: 如果对每一个对类型为S的对象o1,都有类型为T的对象o2,使得以T定义的所有程序P在所有的对象o1都代换成o2时,程序P的行为没有发生变化,那么类型S是类型T的子类型. 内容: 里氏替换原则通 ...

  5. UVALive 7045 Last Defence

    ProblemK. Last Defence Description Given two integersA and B. Sequence S is defined as follow: • S0 ...

  6. Linux下修改系统时区

    使用 /etc/localtime 文件修改时区 先查看一下当前的时区,下面这个例子中使用 UTC 即世界统一标准时区.假设你可能需要改为美国西部标准时间,即太平洋时间. # date Thu Aug ...

  7. java中的递归

    所谓递归,是指程序调用自身,当然,递归不会无休止地调用下去,它必然有一个出口,当满足条件时程序也就结束了,不然的话,那就是死循环了. 看下面这个类,有几个递归方法,看了之后肯定会对你学习递归很有帮助的 ...

  8. Jaro-Winkler Distance

    发现commons-lang 中有实现: StringUtils.class public static double getJaroWinklerDistance(final CharSequenc ...

  9. ajax(20161110)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. 一段从TXT导入excel的py脚本

    #创建文件file = Workbook(encoding='utf-8')#创建sleettableTotalTime = file.add_sheet('TotalTime')#每列给出名称tab ...