Keep on going, never give up.

如何在IOS和OSX中使用SQLCipher

在ios/os开发中,常需要加密sqlite数据库,可通过如下方法:

一、下载sqlcipher并加入工程

1、下载SQLCipher zip包,并解压

https://github.com/sqlcipher/sqlcipher

2、放到我们项目的根目录下,比如Helloworld,那么放到Helloworld下面,而不是其平级目录

3、在当前项目下添加工程引用,sqlcipher.xcodeproj

二、设置Project属性

注意:下面设置必须是左侧先选择PROJECT,不要选成TARGETS!

4、工程设置:Build settings下面Header Search Paths添加参数$(PROJECT_DIR)/sqlcipher

5、工程设置:Build settings下面Other Linker Flags添加参数$(BUILT_PRODUCTS_DIR)/libsqlcipher.a,注意这里是built,不是build!

6、工程设置:Build settings下面Other C Flags添加参数-DSQLITE_HAS_CODEC

三、设置Targets属性

注意:下面设置先左侧选择TARGETS,不要选择PROJECT!

7、工程设置:Build Phases下面Target Dependencies下点击+添加sqlcipher

8、工程设置:Build Phases下面Link Binary With Libraries下点击+添加libsqlcipher.a和Security.framework,注意,下面这个是IOS自带的framework,而不是sqlcipher自带的SQLCipher.framework

9、工程设置:Build Phases下面有关libsqlite3.dylib要删除掉。

10、测试代码(Swift 3.0,其它数据库使用函数同标准sqlite):

 var key:String = "12345678"
sqlite3_key(dbHdlr, key, Int32(strlen(key)));

只是这句key设置是必须放到sqlite3_open后面!!具体可参考官方说明:

https://www.zetetic.net/sqlcipher/ios-tutorial/

Fax:

1、还是提示Use of unresolved identifier ‘sqlite3_key’错误?

解决方法:直接在桥接文件中#import "sqlite3.h"之前,手动增加定义#define SQLITE_HAS_CODEC 1

2、如果编译sqlcipher出错,可能是桥接文件没被调用

解决办法:检查工程设置Build Settings下面的Objective-C Bridging Header,是否为当前目录下的Bridging-Header.h这个文件

3、加密后的数据库,可通过hexdump -C yourdb.sqlite 查看加密结果

4、加密后的数据库,即使提供错误的key也是可以打开的,但是增删改查是无效果,只能正确的key才可以正常增删改查

相关评论(1):  

发表评论:

订阅博客

最新文章

本站采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载也必须遵循“署名-非商业用途-保持一致”的创作共用协议. 返回顶部
Copyright@2005-2018 Metsky.com, All rights Reserved.