背景:公司安全部做信息检查时扫描到沙盒文件夹存在数据库db,需要对db文件要求进行加密!
一、对固定db进行加解密
前提:此种加密db不需要进行'增删改'等操作,仅提供'查'的权限;
-
采取通用的加密工具:
pod 'FMDB/SQLCipher'
-
核心思路:打开数据库open -> 设置秘钥 setkey -> 查看连接 goodConnection -> 新建数据库并迁移数据,删除老的数据库;
-
新建继承
FMDatabase
的子类LCEncryptDatabase
:a. 重写父类四个函数,新增一个函数: 1. `-(BOOL)open;` 2. `-(BOOL)openWithFlags:(int)flags;` 3. `-(BOOL)openWithFlags:(int)flags vfs:(NSString *)vfsName;` 4. `-(const char*)sqlitePath;` 5. `-(void)setEncryptKey:(NSString *)encryptKey`; b. 不同版本的FMDB对应的重写方法不一致,下列拿2.5和2.75两个版本举例参考: 1. ~2.5版本:
- ~2.75版本:
-
在需要加密的地方调用 :
a.
[FMEncryptDatabase setEncryptKey:@"秘钥"];
-
正常sql语句查询读取数据库数据;
a.限制:此查询限制在[db close]前,当数据库关闭后再查询读取会报错
sqlite error :file is encrypted or is not a database
;
二、对不固定db进行加解密
前提:仅对数据库进行加解密,但不限制数据库的'增删改查';
注意点:
1.需要根据对应使用的数据库<sqlite3、FMDB、LKDB等>做open和close区分;
2.可以设置数据库自动close时间进行限制;
- 在[db open]的时候进行解密:
图片.png
- 在[db close] 时候进行加密:
- 也支持修改数据库秘钥:
网友评论