FMDB/SQLCipher数据库加密

  在iOS开发过程中经常需要用到SQLite来存储数据,由于Apple的沙盒机制,我们App的数据存储在沙盒里面,一般情况下无法拿到数据,但是iOS管理软件iFunBox可以读取到应用程序沙盒里面的文件,因此为了保证数据的安全性,我们需要对数据库进行加密。

数据库加密有两种方式:

1.对所有数据进行加密

2.对数据库文件加密

  对比以上两种方式,第一种方式的常见做法是是将要存储的内容先加密然后存到数据库中,使用的时候将数据库解密,但是这样会消耗很多时间,大部分性能消耗在数据的加解密上,同时,第二种方式,SQLite本身支持加密功能(免费版的不支持) ,SQLCipher是一个开源的SQLite加密扩展,支持对db文件进行256位的AES加密,通常我们会用FMDB这个工具库,FMDB对原生的SQLite进行了封装,提供了面向对象的方式对数据库操作,同时FMDB 也提供了对 SQLCipher 的支持。

集成SQLCipher

  编译SQLCipher需要做一些配置,具体配置详情见:https://www.zetetic.net/sqlcipher/ios-tutorial/,这里我们使用cocoapod 引用 FMDB 和SQLCipher。

1.获取SQLCipher加密模块

Podfile中添加pod 'FMDB/SQLCipher'。

2.导入SQLCipher

  执行 pod install后自动获取SQLCipher,SQLCipher只有两个文件sqlite3.h、sqlite3.m,如果不是通过CocoaPods获取SQLCipher模块的话需要手动拷贝sqlite3.h、sqlite3.m文件到工程中。

3.配置Xcode

  通过宏(SQLITE_HAS_CODEC)来配置SQLite是否开启加密模块,我们需要在Xcode中配置开启加密模块组件的宏,本文介绍CocoaPods方式的则不用配置。

(1)target -> Build Setting -> Other C Flags添加-DSQLITE_HAS_CODEC、-DSQLITE_TEMP_STORE=2、-DSQLITE_THREADSAFE、-DSQLCIPHER_CRYPTO_CC几项配置

(2)target -> Build Setting -> Other Linker Flags添加-framework Security配置

4.添加加密代码

一般是在数据库open之后就用这个 setKey 方法。

说明:

  1. 如果项目中原来有FMDB,不推荐直接引入FMDB/SQLCipher,修改后不利于类库的统一管理和更新。我们可以直接将sqlite3.h、sqlite3.m文件拖到工程中,然后配置Xcode即可。简单来说步骤如下:

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

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

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

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

然后FMDatabase 的 setkey 方法就可以用了,在打开数据库后,调用此方法,数据库文件就加密可以了。

参考资料:

 《对FMDB加密-SQLCipher如何使用》

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 数据库加密一般有两种方式 1、对所有数据进行加密 2、对数据库文件加密 对比以上两种方式,第一种方式的常见做法是是...
    肉肉要次肉阅读 3,556评论 0 1
  • 介绍: 使用SQLite数据库的时候,有时候对于数据库要求比较高,特别是在iOS8.3之前,未越狱的系统也可以通过...
    farawei阅读 5,109评论 2 51
  • 这篇文章介绍如何对数据库文件进行加密,基于FMDB+SQLCipher,标明踩过的坑,留给同样掉进坑里的小伙伴参考...
    7544eb39c4ac阅读 6,627评论 3 28
  • 在iOS应用程序开发中经常需要使用SQLite来存储数据,很多时候需要加密保存一部分的数据。常见的做法是将要存储的...
    Crazy2015阅读 5,648评论 0 4
  • 早上6:22婆婆打来电话,响了三声,挂断,不明白几个意思,我困得不行不行的,摁了手机翻身又睡,下午回过去说没什么事...
    w尺素寸心阅读 193评论 0 0