0x00 sqlite概述
sqlite是一个轻量级、跨平台的,开源的数据库引擎,它在读写效率,消耗总量、延迟时间和整体简单性上具有的优越性,使其成为移动平台数据库的最佳解决方案。
然而免费版的sqlite有一个致命缺点:不支持加密。这就导致存储在sqlite中的数据可以被任何人用任何文本编辑器查看到。
0x01 sqlite加密工具
sqlite Encryption Extension(SEE)
事实上sqlite有加解密接口,只是免费版本没有实现而已。而sqlite Encryption Extension(SEE) 是sqlite的加密版本,提供一下加密方式:
RC4
AES-128 in OFB mode
AES-128 in CCM mode
AES-256 in OFB mode
sqlite Encryption Extension(SEE)版本是收费的。
sqliteEncrypt
使用AES加密,其原理是实现了开源免费版sqlite没有实现的加密相关接口。
sqliteEncrypt是收费的。
sqliteCrypt
使用256-bitAES加密,其原理和sqliteEncrypt一样,都是实现了sqlite的加密相关接口。
sqliteCrypt也是收费的。
sqlCipher
首先需要说明的是,sqlCipher是完全开源的,代码托管在github上。
sqlCipther使用256-bit AES加密,由于其基于免费版的sqlite,主要的加密接口和sqlite是相同的,但也增加了一些自己的接口,详情见这里。
sqlCipher分为收费版本和免费版本,官网介绍的区别为:
只是集成起来更简单,不用再添加openssl依赖库,而且编译速度更快,从功能来说没有任何区别。
0x03sqlite加密解密实现
这里介绍得非常详细。
看上部分,加解密算法能了解到,DB会针对每一页进行加密或解密操作,每一页大小为4096,这大小都为512的倍数。我们以二进制方式去打开DB文件可以看到满足这个规律。那么这个规律可以帮助我们做什么事情呢,我们通过规律就会知道,db文件会全部映射到页去处理加解密,那么我们解密思路可以总结为:
1.找到生成解密的KEY。
原文链接:https://www.f2er.com/sqlite/198508.html