根据公司需求需要对数据库加密,公司使用FMDB
做的数据库,上网查看了许多博客发现不少坑,总结一下如何使用SQLCipher
。
Demo下载地址-本人写的LKFMDB对FMDB
面向对象封装支持SQLCipher
加密,操作简单完全面向对象封装。
在简书地址
加密步骤
pod使用步骤
- 首先你的数据库必须使用
FMDB
- 在github下载,你会在里面发现原来他是支持pod的,所以你可以直接
pod 'FMDB/SQLCipher' # FMDB with SQLCipher
- 然后就是
pod install
,如果被墙了就用pod install --verbose --no-repo-update
- 这样的你的工程就有
SQLCipher
文件了 - 这样数据库还是没有加密的因为默认是不加密的所以你必须在
FMDatabase.m
大约在150行和177行左右加上下面这几句话
//不需要加密请注释掉下面三行代码
else{
[self setKey:DB_SECRETKEY];
}
DB_SECRETKEY
是宏也就是秘钥
截图说明
但是许多项目是不怎么使用pod的,所以需要直接拖入工程里面
有的项目原来就是有fmdb
工程文件的,但是不能加密,我的目的就是要把fmdb
搞成支持加密的,应该很多人的工程都是要这个场景吧
- 准备工作首先你的工程是有
FMDB
的,同时也有SQLCipher
的 - 我们把准备好的
SQLCipher
文件下sqlite3.c
和sqlite3.h
拖入到需要加密的工程,这样就OK了 - 重复上面的第5步
-
关键步骤来了 关键步骤来了 关键步骤来了
要在工程里设置两个地方
-DSQLITE_HAS_CODEC
-DSQLITE_THREADSAFE
-DSQLCIPHER_CRYPTO_CC
-DSQLITE_TEMP_STORE=2
在这个地方需要注意网上的有博客是 Security -framework 这样的顺序但是编译的时候会报错。
总结一下
其实简单步骤就是:
1.在你有fmdb的工程里,加入sqlite3.h 和 sqlite3.m
2.在工程的build setting里修改两个配置
一个是other c flags ,如上面图的那个 other c flags
一个是 other link flags , 入上图那个other lilnk flags
然后FMDatabase 的 setkey 方法就可以用了,在打开数据库后,调用此方法,数据库文件就加密ok了。
你在打开数据库会发现打开数据提示
日了狗了输入秘钥也打不开,然而就是这样。问我为什么我也不知道,反正在程序工是可以用代码操作读取数据库的。
最后是不是在使用FMDB
特别繁琐要写一堆SQL语句
Demo下载地址-githubLKFMDB本人对FMDB
面向对象封装支持SQLCipher
加密,操作简单完全面向对象封装。
在简书地址