最近因为项目的需求,需要进行本地数据库的上传,呐,总不能赤果果的不进行加密就上传啊,所以就研究了下如何进行数据库的加密。Google可知加密的方式还是蛮多的,这里使用的是免费的SQLCipher,至于收费的,咱就不考虑了~毕竟免费就可以实现的功能何必要掏银子呢对吧~(但是有一点要说明,免费的有点low,放在工程中看着特别碍眼,收费的死贵死贵,但是!你可以拿到一个静态库,还有专业技术团队支持,而且只要一个静态库,根本不要什么一堆配置,看起来也很舒服);
废话不多说,直接讲过程,这里我想吐槽的是百度的很多教程的作者都是极其不负责任的,直接copy别人的文章,自己都不看看能不能实现,唉~(童鞋们, 能用Google就用Google吧,珍爱时间, 远离百度...)
一,利用Git进行clone得到sqlcipher文件夹,并拖拽到想要放置的项目目录下,不是直接拖到Xcode项目目录中(也可以直接clone到项目的根目录);
cd ~/Documents/xxxx/xxxx
git clone https://github.com/sqlcipher/sqlcipher.git
二,选中项目target,"Add Files to xxx", 选中sqlcipher中的sqlcipher.xcodeproj;
官方文档:Check each target to which you want to add SQLCipher, and leave "Copy items if needed" un-checked.意思是在添加的时候不要勾选 Copy items if needed 复选框;
三,关于OpenSSL.
OpenSSL is no longer required for building SQLCipher on iOS and OS X, as the project by default uses Apple's CommonCrypto framework for hardware-accelerated encryption. You can stillbuild SQLCipher with other crypto providerslike OpenSSL if you'd prefer, or you can write your own.
可能之前加密的时候是需要配置OpenSSL,但是现在我们的工程都默认使用了Apple自家的CommonCrypto库来进行加密过程中得硬件加速,所以OpenSSL也就不需要了.
四,工程配置(关键步骤,不能有差错)
上图①:
图②:
注意:Hot Tip:Iflibsqlite3.dylibor another SQLite framework is listed in your Link Binary With Libraries list be sure to remove it, or you'll see duplicate symbol errors.
注意: 在Link Binary With Libraries中添加libsqlcipher.a时候,要确保没有添加其他的SQLite库,有的话,去掉;
五,参数配置(同样重要)
选中Build Settings,搜索框中输入Header Search Paths,在搜出来的结果中,双击,点击添加,键入./sqlcipher/src
上图③:
继续搜索Other C Flags,在结果中添加-DSQLITE_HAS_CODEC
图④:
六,初始化代码(这个看自己的需求而改变);
如果是第一次建立数据库,想要建立一个加密的数据库的话(或者要打开一个用SQLCipher加密的数据库),那么就用如下的代码就好啦,比较简单;(唉,编辑器无法插入代码, 但是对Markdown又不是太熟悉,只能截图啦...)
如果你的项目中已经存在了数据库,现在想要把数据库迁移加密一下(像我这样的),那代码略微有些多.
OK啦,到这里加密工作已经做得差不多了,但是总感觉就这样直接输入一个加密的key怪怪的...不够高端啊,没关系,官网上又详尽的说明,告诉你可以用多么牛逼的方式加密你的数据库,可惜我没有研究...哈哈,有需要可以自己去看.
文档地址: https://www.zetetic.net/sqlcipher/ios-tutorial/
还没有结束,我们题目中提到了压缩,这里我也要说一下,因为其中有一个吭,害怕你们跳进去...
相比于加密,压缩要简单的多,这里使用的时开源的ZipArchive;各位自行github;
三个步骤:
1. Add `Main.h` and `Main.m` to your project.
2. Add the `minizip` folder to your project.
3. Add the `libz` library to your target
完了之后你可以编译一下了~
啊喂, 赶紧停,否则你会被一推红色报错吓住的,哈哈,其实这里是因为ZipArchive中包含了一些C文件,所以需要更改一下这些C文件的type
解决方案: 选择所有.c文件,将属性的 identity and type 改为Objective-C Source。
OK,完了,没有错误了~
下面附上我的压缩的代码供参考:
以及获取MD5的代码:
对啦对啦,还有带进度的上传还没有说呢,那就在下一篇中再说吧~
本人原创, 转载请注明来源,谢谢~