利用SQLCipher加密数据库并压缩上传

最近因为项目的需求,需要进行本地数据库的上传,呐,总不能赤果果的不进行加密就上传啊,所以就研究了下如何进行数据库的加密。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 复选框;


不要勾选 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也就不需要了.

四,工程配置(关键步骤,不能有差错)

选中图中所示,依次在Target Dependencies中添加sqlcipher,在Link Binary With Libraries中添加libsqlcipher.a

上图①:

Target Dependencies中添加sqlcipher

图②:

Link Binary With Libraries中添加libsqlcipher.a

注意: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

上图③:

./sqlcipher/src

继续搜索Other C Flags,在结果中添加-DSQLITE_HAS_CODEC

图④:

-DSQLITE_HAS_CODEC

六,初始化代码(这个看自己的需求而改变);

如果是第一次建立数据库,想要建立一个加密的数据库的话(或者要打开一个用SQLCipher加密的数据库),那么就用如下的代码就好啦,比较简单;(唉,编辑器无法插入代码, 但是对Markdown又不是太熟悉,只能截图啦...)

要在头文件导入sqlite哦

如果你的项目中已经存在了数据库,现在想要把数据库迁移加密一下(像我这样的),那代码略微有些多.

说明很详细啦,就是将未加密的数据库数据导入新建的加密数据库

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的代码:

泪,13寸的Mac,不够截取整个方法...只能分两部分,我特意截取了代码行,哈哈


完啦~

对啦对啦,还有带进度的上传还没有说呢,那就在下一篇中再说吧~

本人原创, 转载请注明来源,谢谢~

你可能感兴趣的:(利用SQLCipher加密数据库并压缩上传)