给sqlite 数据库加密,使用SQLCipher+Openssl

SQLite是一个持久性数据存储在iPhone上流行的API,因此在上攻的发展是显而易见的。作为一个程序员,你的工作稳定和有据可查的API。干净利索地从应用程序代码中分离出来的所有安全问题和管理的基本框架

SQLCipher和OpenSSL项目的框架代码都是开放的源代码,所以用户可以放心的应用程序不使用不安全的代码或专有的安全。此外,这些项目可以编译和支持的Mac OS X,Windows上,甚至Linux下的桌面应用程序。

在iPhone应用程序中使用SQLCipher很简单,一旦你正确设置你的项目。本文档描述了的整合SQLCipher到的iOS XCode项目使用的是社区版的源代码构建过程。本教程假定您熟悉基本的iOS应用开发和安装的iOS SDK和XCode 4.2。相同的基本步骤也应该用Mac OS X的应用程序。

重要注意事项: 商业版SQLCipher静态库,也可用于iOS和Mac OS X。这些静态库提供相同的功能,但更容易的设置,建立一个现代版的OpenSSL,并为每个生成周期要快得多。更多»

OpenSSL的

SQLCipher使用的广泛信赖和同行评议的OpenSSL库的所有加密功能,其中包括AES-256算法,伪随机数生成,和PBKDF2关键的推导。OpenSSL是不是直接在iPhone上使用的框架,所以我们的项目,我们将设置为静态库,编译并链接。

下载1.0.x的稳定从http://www.openssl.org/source/版本的,它解压缩到一个文件夹在您的系统上。由于相同的OpenSSL源代码树,可以共享在多个SQLCipher项目,这是一个好主意,把它放到你的项目文件夹以外的一些共享位置。Justs记后的源目录路径。

SQLCipher

切换到你的项目的根目录和签出SQLCipher项目代码 下载地址:https://github.com/sqlcipher/sqlcipher

OpenSSL的X Code中

OpenSSL可以是棘手的从源代码编译。这是更复杂的,当你处理多个目标架构(iOS开发针对I386的模拟器,但ARMv6和ARMv7的设备)

OpenSSL的XCode项目 下载地址:https://github.com/sqlcipher/openssl-xcode

包括依赖于OpenSSL的配置和系统构建库项目模板。然而,它会自动检测到适当的设置是i386,x86_64,arvm6,ARMv7的架构(),生成工具和SDK。这使得它非常适合在iPhone项目列入。

一直使用sqlite来管理本地的数据,但是Xcode中的SDK中集成的sqlite是免费的,不提供加密模块,但是程序中用到的很多数据,有时候是不想让别人看到,一开始虑修改sqlite的源码,自己重新编译sqlite生成一个带加密模块的静态库,找了一下相关资料,需要修改源码中的makefile和自己实现加密算法等东西,折腾了一下,无果,就果断放弃了。此路不通,那就想别的办法来实现加密功能:现在找到3中方法来实现数据库加密的功能

方法一、对sqlite中的数据进行加密:
就是对数据库中插入的内容先进行aes、MD5等加密后在插入到数据库中,在使用时先从数据库中取出数据,然后在解密在使用这种方式好是好,但是有些致命的问题不能绕过,就是你如果要对某个字段进行模糊查询操作,那么该字段就不能加密,否则的话你不能对该字段进行模糊查询操作;这样一 来该字段还是要暴漏出来,别人还是能看到一些东西的

方法二、对插入的数据进行简单的字符替换 :
在插入数据之前,先将一些字符用特定的字符替换掉,在使用的时候在替换回来,对与全是字符集的字段这样操作,也不会影响模糊查询操作(查询之前先用特定字符将输入据替换,在用替换后的数据进行模糊查询,这样就不会有什么影响,同时你也可以用方法一对非查询字段进行加密;这种方法也有个致命的缺点,就是如果你查询的字段是中文的话,这个字符替换就是个大问题,不好解决。

方法三、使用第三方库的开源库,实现对sqlite数据库的加密.

找来找去,SQLCipher这个开源框架不错,相关使用方法可以参考官方的文档,说的很详细,照着一步一步的做就可以了http://sqlcipher.net/ios-tutorial/ 官方的地址, 同时你可以参考一下这个blog http://blog.csdn.net/kuai0705/article/details/8931996,一些地方不是太详细,以官方文档为主

如果在编译时提示:No architectures to compile for (ARCHS=armv6,armv7, VALID_ARCHS=armv7 armv7s则将在Bulid Settings选项下面的Architectures和Valid Architectures里面都改成一样(例如:都填写 armv6 armv7),问题解决。 对于警告 :warning: implicit declaration of function ‘sqlite3_key’ is invalid in C99 只需要将Bulid Settings选项下的C Language Dialect 改为:C89[-std-c89] 就可以,即使用c89标准.

Top Down