途牛原创|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。
关于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。
相关文章推荐
- SQL 输出某一天所在的年月对应的所有星期的开始与结束日期(每个月仅算4周,第四周可能会有10天)
- 如何在同一台服务器上安装sql server2000和2005
- oracle高水线对性能的影响
- 关于MySQL中的游标问题
- oracle技术博客
- Oracle中存储过程迁移到Mysql的问题集锦
- mybatis之sql总结
- MySQL知识分类
- redis3安装
- Spark SQL系列------1. Spark SQL 物理计划的Shuffle实现
- plsql ORA-12541:TNS:无监听程序
- MySQL创建用户与授权方法
- Oracle trunc()函数的用法
- lnmp+redis+solr+rabbitmq+memcache+nginx_mogilefs_module+jdk1.8.0_73环境配置
- 单文件小型数据库的选择
- oracle 将查询结果纵向横向显示。
- mysql配置优化
- perl 连接 mysql 数据库
- 【SQL Server】Session blocking
- Nginx + Tomcat + Redis 集群下的Session共享