(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和你的数据库管理软件并不一定是用的是一套加解密机制。 

  有问题请留言,尽量回答。

 

 

转载于:https://www.cnblogs.com/hikoming/p/3515009.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FMDB的封装,使你的实体类具备数据库操作的功能,极大简化你的数据库操作,对于自己的扩展也非常简单。 该框架是本人在项目中用到的对FMDB的封装,它的特点如下: 1.自动创建数据库、自动创建数据库表。 2.自动检测字段添加新字段。 3.一行代码实现数据库的CURD操作。 4.源码及其简单,易于理解和掌握。 5.扩展自己的功能也非常得简单,容易。 6,只关心字段和字段值,完全不用关心数据库操作逻辑. 特别提示:字段值全部以字符串的形式统一处理 常用的api如下: /** 获取数据库单例函数 */ (instancetype)intance; /** 数据库中是否存在表 */ - (BOOL)isExistWithTableName:(NSString*)name; /** 默认建立主键id 创建表(如果存在则不创建) , keys 数据存放要求@[字段名称1,字段名称2] */ -(BOOL)createTableWithTableName:(NSString*)name keys:(NSArray*)keys; /** 插入 只关心key和value @{key:value,key:value} */ -(BOOL)insertIntoTableName:(NSString*)name Dict:(NSDictionary*)dict; /** 根据条件查询字段 返回的数组是字典( @[@{key:value},@{key:value}] ) ,where形式 @[@"key",@"=",@"value",@"key",@">=",@"value"] */ -(NSArray*)queryWithTableName:(NSString*)name keys:(NSArray*)keys where:(NSArray*)where; /** 全部查询 返回的数组是字典( @[@{key:value},@{key:value}] ) */ -(NSArray*)queryWithTableName:(NSString*)name; /** 根据key更新value 形式 @[@"key",@"=",@"value",@"key",@">=",@"value"] */ -(BOOL)updateWithTableName:(NSString*)name valueDict:(NSDictionary*)valueDict where:(NSArray*)where; /** 根据表名和表字段删除表内容 where形式 @[@"key",@"=",@"value",@"key",@">=",@"value"] */ -(BOOL)deleteWithTableName:(NSString*)name where:(NSArray*)where; /** 根据表名删除表格全部内容 */ -(BOOL)clearTable:(NSString*)name; /** 删除表 */ -(BOOL)dropTable:(NSString*)name;

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值