project用得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 安装到自己的project里。
简单做法就是(接下来的步骤的前提是你的电脑上安装了cocoapods,请务必依照上面链接的教程配置好,否则以下步骤会失败):
1.在您自己的project文件夹下新建一个文件Podfile,打开终端 输入命令行 $ vi Podfile , 然后写入 pod ‘FMDB/SQLCipher ’, 然后保存退出
2.命令行直接 输入 $pod update .
然后等待直到出现:
Analyzing dependenciesDownloading dependenciesInstalling FMDB (2.3)Generating Pods projectIntegrating client project[!] From now on use `SqliteHasCcode.xcworkspace`.
类似这种提示出现,标示成功安装,然后文件夹会变成类似这个样子:
之后进入project都要点这个 .xcworkspace,进入后会是这个样子:
之后加入加密代码:
我是直接在FMDatabase.m里加的,这个看个人代码须要加的地方加就ok,通常是在数据库open之后就用这个 setKey 方法。
然后编译,执行,不出意外是OK得,用第三方数据库管理工具验证是否加密,当导入加了密的数据库的时候,会直接提示 ‘数据是加密的’ 类似的话,假设用命令行的sqlite3 打开的话,是能够打开的,可是当用 .table 查看的时候,是看不见不论什么表的,入下图:
但其实,这个数据库是有表有内容的, 这样就防止了我们数据库的数据外泄。
接下来是还有一个重点:
用cocoapods安装后,事实上是往我们的project里加入了另外一个projectPods,个人感觉非常不爽,于是决定,把它融合到我的project里。
先看一下我移成功后的还有一个project的结构(这个project原来就是有fmdbproject文件的,可是不能加密,我的目的就是要把fmdb搞成支持加密的,应该非常多人的project都是要这个场景吧):
不像是cocoapods 安装的那样,有两个proj,从文件上来说,仅仅多了sqlite3.h 和 sqlite3.m,然后FMDB文件还是你原来用得。这是我们终于要实现的样子,好了,乱入完成。
開始:
细致看用cocoapods 安装后的project结构:
事实上和我们寻经常使用得FMDB相比較,仅仅是多了SQLCipher的这块的支持,那么我们仅仅要想办法,把这块单独移到我们之前已经有FMDB得project里就能够了
SQLCipher文件夹下,有两个子文件夹,Support Files是配置文件,common是主代码文件。
common下得两个文件,直接拖入到我们的project就可以,然后关键是这里的配置:
1.pods-SQLCipher.xcconfig:
看到嘛,OTHER_CFLAGS 和 OTHER_LDFLAGS 分别相应project里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 在我们的project文件夹下,到时候仅仅要包括 #import “sqlite3.h” 就ok
OTHER_CFLAGS 和 OTHER_LDFLAGS 和PODS_ROOT 事实上就是用得pods-SQLCipher.xcconfig里的这几个的设置,所以pods-SQLCipher.xcconfig设置好这里也就好了。
由于用cocoapods安装后,这里的这些配置是要使SQLCipherproject和主project的一些配置统一的,所以在移掉cocoapods安装的形式后,就不用管这些了。
事实上简单步骤就是:
1.在你有fmdb的project里,增加sqlite3.h 和 sqlite3.m
2.在project的build setting里改动两个配置
一个是other c flags ,如上面图的那个 other c flags
一个是 other link flags , 入上图那个other lilnk flags
然后FMDatabase 的 setkey 方法就能够用了,在打开数据库后,调用此方法,数据库文件就加密ok了。