转:http://blog.csdn.net/ydj213/article/details/8650051
demo下载:http://download.csdn.net/detail/ydj213/5120854
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项目列入。
XCode的设置
sqlCipher使用项目管理的构建依赖关系和静态链接。使用sqlCipher在编写代码之前,你必须设置的XCode,您的项目,建立sqlCipher。
OpenSSL的源代码树
开始,打开XCode项目,选择Xcode的菜单,XCode Menu-》Preferences,-》Locations tab,and Source Trees screen。添加变量命名OPENSSL_SRC的,提取的OpenSSL源代码的路径。
添加子项目引用
现在,在XCode全球的喜好设置,我们将进入项目配置。
在应用程序项目,请单击“在顶层的工程项目。在项目上点击鼠标右键,并选择“将文件添加到”项目“,或按选项命令,添加一个资源。导航到项目目录,内的sqlcipher文件夹,,并添加sqlcipher.xcodeproj。如果你有多个目标,是一定要添加的文件都。重复相同的步骤openssl-xcode/openssl.xcodeproj。
配置所需的构建依赖关系
我们必须将构建依赖关系,以确保sqlCipher之前被编译的应用程序代码。您的应用选择目标,然后打开“信息”面板。在构建阶段“选项卡,在”目标依赖“部分中,我们将增加双方openssl的/的加密和sqlcipher / sqlcipher的的。使用命令单击以选中两者兼而有之。
然后,下链接的二进制文件和库部分中,添加libcrypto.a libsqlcipher.a。
同一组的依存关系和链接设置任何其他目标将取决于sqlCipher,即单元测试的项目中。
设置建立的架构和CFLAGS
选择顶层项目,然后选择“生成”设置“选项卡,扩展的架构设置。发表的debug设置为默认值。(例如:的ARMv7和armv7s,适用于iOS,x86_64的为MacOS)确定的release架构是正确的。如果需要改变他们。这将确保所有相关的项目,将部署在所有所需的硬体架构。
接下来,找到搜索头文件的路径设置,并添加“sqlcipher”的搜索路径。这将确保Xcode可以找到所需要的头的sqlCipher库。确保“递归”框上,包括检查,或构建可能会失败。
最后,在“otherCFlags”,附加DsqlITE_HAS_CODEC的Debug和Release C标志设置(分别添加)。这将确保,sqlite的密钥管理功能被定义为应用程序的使用。
注:如果您选择,改变构建架构或使用的编译器,你必须采用相同的生成设置下openssl.xcodeproj和sqlcipher.xcodeproj。这三个设置必须匹配的所有项目。
在这一点上,你应该没有错误,能够建立的XCode项目。请注意,在第一时间内为特定的体系结构(例如模拟器)构建应用程序,它会需要更长的时间比平常。这是,因为sqlCipher和OpenSSL是从源代码编译为特定的体系结构。您可以跟踪的状态下生成结果。在同一平台上的后续版本将更快,因为图书馆没有需要重新编译。
集成代码
现在,sqlCipher纳入项目库,您可以立即开始使用该系统。告诉sqlCipher加密数据库是那么容易,因为打开一个数据库,并使用sqlite3_key功能。
- NSString *databasePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES) objectAtIndex:0]
- stringByAppendingPathComponent: @"sqlcipher.db"];
- sqlite3 *db;
- if(sqlite3_open([databasePath UTF8String],&db) == sqlITE_OK) {
- const@H_900_403@char* key = [@"BIGSecret"UTF8String];
- sqlite3_key(db,key,strlen(key));
- sqlite3_rekey(db,NULL,0);
- if(sqlite3_exec(db,(char*)"CREATE TABLE sqlmaster (ROW INTEGER,FIELD_DATA TEXT);",NULL) == sqlITE_OK) {
- // password is correct,or,database has been initialized
- }else{
- // incorrect password!
- }
- /*
- if (sqlite3_exec(db,(const char *)"SELECT count(*) FROM sqlmaster",NULL)==sqlITE_OK) {
- NSLog(@"密码正确");
- }
- else{
- NSLog(@"密码错误");
- */
- sqlite3_close(db);
- }