ios开发FMDB导入SQLCipher加密数据库

转自:http://blog.csdn.net/icemilk00/article/details/37592755


工程用得FMDB做数据库的操作,后期要对数据库做加密,这里有两种方法:



     1.对数据库内容加密,存的时候加密,用得时候解密。


     2.直接对数据库文件加密。


     这里我选择了第二种,原因不细说,自己决定。






     百度后,决定用SQLCipher,而且FMDB是支持SQLCipher的,官方配置说明地址 http://sqlcipher.net/ios-tutorial/   ,然后尝试,配置失败,而且使app包加大了很多兆,所以


不推荐。


     后来在FMDB官方发现了这个:


     






      即可以用cocoapods来安装支持SQLCipher加密数据库的FMDB包,如果您没用过cocoapods安装过第三方开源库,这里推荐一个教程,很详


细:http://code4app.com/article/cocoapods-install-usage


      到这里我们所做的就是要把 FMDB/SQLCipher  用cocoapods 安装到自己的工程里。


      简单做法就是(接下来的步骤的前提是你的电脑上安装了cocoapods,请务必按照上面链接的教程配置好,否则下面步骤会失败):


      1.在您自己的工程目录下新建一个文件Podfile,打开终端   输入命令行  $ vi Podfile  , 然后写入   pod ‘FMDB/SQLCipher ’, 然后保存退出


      2.命令行直接 输入  $pod update .


      然后等待直到出现:


      
Analyzing dependencies
Downloading dependencies
Installing FMDB (2.3)
Generating Pods project
Integrating client project


[!] From now on use `SqliteHasCcode.xcworkspace`.




    类似这样的提示出现,标示安装成功,然后目录会变成类似这个样子:


      


  之后进入工程都要点这个  .xcworkspace,进入后会是这个样子:


  






之后添加加密代码:










我是直接在FMDatabase.m里加的,这个看个人代码需要加的地方加就ok,一般是在数据库open之后就用这个 setKey 方法。






然后编译,运行,不出意外是OK得,用第三方数据库管理工具验证是否加密,当导入加了密的数据库的时候,会直接提示 ‘数据是加密的’ 类似的话,如果用命令行的sqlite3 打开的话,是可以打开的,但是当用 .table 查看的时候,是看不见任何表的,入下图:










但事实上,这个数据库是有表有内容的, 这样就防止了我们数据库的数据外泄。






接下来是另一个重点:


用cocoapods安装后,其实是往我们的工程里添加了另外一个工程Pods,个人感觉很不爽,于是决定,把它融合到我的工程里。


先看一下我移成功后的另一个工程的结构(这个工程原来就是有fmdb工程文件的,但是不能加密,我的目的就是要把fmdb搞成支持加密的,应该很多人的工程都是要这个场景吧):










不像是cocoapods 安装的那样,有两个proj,从文件上来说,只多了sqlite3.h 和 sqlite3.m,然后FMDB文件还是你原来用得。这是我们最终要实现的样子,好了,乱入完毕。








开始:


仔细看用cocoapods 安装后的工程结构:










其实和我们平常用得FMDB相比较,只是多了SQLCipher的这块的支持,那么我们只要想办法,把这块单独移到我们之前已经有FMDB得工程里就可以了




SQLCipher目录下,有两个子目录,Support Files是配置文件,common是主代码文件。


common下得两个文件,直接拖入到我们的工程即可,然后关键是这里的配置:


1.pods-SQLCipher.xcconfig:


   


  看到嘛,OTHER_CFLAGS 和 OTHER_LDFLAGS  分别对应工程里build settings的:


  Other c Flags :










这个主要是一些编译宏。






和other Linker Flags






-framework  和 Security 是两个,是分开的,别搞成一个了。


按pods-SQLCipher.xcconfig 配置文件里的配置把这两个地方改过来,如上图.


2.pods-SQLCipher-Private.xcconfig










这里的配置其实没什么要改的


GCC_PREPROCESSOR_DEFINITIONS 应该是设置编译器的一些什么,后面设为了COCOAPODS = 1, 我们就是为了去掉cocoapod的安装形式的,所以我感觉这个配置我们不用理,所以我也没有管。


HEADER_SEARCH_PATHS ,不用配置,因为我们后来只加了sqlite3.h, 和sqlite3.m 在我们的工程目录下,到时候只要包含 #import “sqlite3.h” 就ok


OTHER_CFLAGS 和 OTHER_LDFLAGS 和PODS_ROOT 其实就是用得pods-SQLCipher.xcconfig里的这几个的设置,所以pods-SQLCipher.xcconfig设置好这里也就好了。






因为用cocoapods安装后,这里的这些配置是要使SQLCipher工程和主工程的一些配置统一的,所以在移掉cocoapods安装的形式后,就不用管这些了。






其实简单步骤就是:


1.在你有fmdb的工程里,加入sqlite3.h 和 sqlite3.m


2.在工程的build setting里修改两个配置


   一个是other c flags ,如上面图的那个 other c flags


   一个是 other link flags , 入上图那个other lilnk flags 


然后FMDatabase 的 setkey 方法就可以用了,在打开数据库后,调用此方法,数据库文件就加密ok了。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值