您的位置:首页 > 数据库

途牛原创|SQLite 加密解决方案

2016-02-25 14:43 330 查看
2016-02-22 途牛无线中心 熊财兴



关于SQLite

iOS中使用了苹果提供的开源免费的数据库引擎——SQLite。它在读写效率、消耗总量、延时时间和整体简单性上具有优越性,这使其成为移动平台数据库的最佳解决方案。Mac OS和iOS中的Keychain使用SQLite来存储,只是Keychain的安全级别比较高。

然而免费版的SQLite有一个致命缺点:不支持加密。这就导致存储在SQLite中的数据可以被任何人用任何文本编辑器查看到。比如某些iOS客户端的DB缓存数据就比较暴露:



SQLite加密方式

对数据库加密的思路有两种:

1、将内容加密后再写入数据库

这种方式使用简单,入库/出库只需要将字段做对应的加密解密操作即可,一定程度上解决了将数据赤裸裸暴露的问题。

不过这种方式并不是彻底的加密,因为数据库的表结构等信息还是能被查看到。另外写入数据库的内容加密后,搜索也是个问题。

2、对数据库文件加密

将整个数据库整个文件加密,这种方式基本上能够解决数据库的信息安全问题。目前已有的SQLite加密基本都是通过这种方式实现的。

SQLite加密工具

1、 SQLite Encryption Extension(SEE)

https://www.sqlite.org/index.html

事实上SQLite有加密接口,只是免费版本没有实现而已,而SQLite Encryption Extension(SEE)是SQLite的加密版本,提供的加密方式:

RC4

AES-128 in OFB mode

AES-128 in CCM mode

AES-256 in OFB mode

2、 SQLiteEncrypt 【https://www.sqlite-encrypt.com/index.htm

使用AES加密,其原理是实现了开源免费版SQLite没有实现的加密相关接口。注:收费的

3、 SQLiteCrpt

https://sqlite-crypt.com/index.htm

使用256-bit AES加密,其原理和SQLiteEncrypt一样,都是实现了SQLite没有实现的加密相关接口。注:也是收费的

4、 SQLCipher 【 https://sqlcipher.net/

首先需要说明的是,SQLCipher是完全开源的代码托管在GitHub【https://github.com/sqlcipher/sqlicipher

其次,SQLCipher使用256-bit AES加密,由于基于免费版本的SQLite,主要的加密接口和SQLite是相同的,但也增加了一些自己的接口。

此外,SQLCipher集成起来更简单,不用再添加openssl依赖库,而且编译速度更快,从功能上来说没有任何区别。

在项目中使用SQLCipher

在项目中集成免费版的SQLCipher略有复杂,官网以图文方式介绍的非常详细,集成过程请参考官网教程【https://sqlicipher.net/ios-tutorial】

注:App中核心数据应该存储到Keychain或者加密的DB中。途牛App在XMPP重构过程中已经使用SQLCipher。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: