iOS - 信息安全之数据库加密

背景:公司安全部做信息检查时扫描到沙盒文件夹存在数据库db,需要对db文件要求进行加密!

一、对固定db进行加解密

前提:此种加密db不需要进行'增删改'等操作,仅提供'查'的权限;

  1. 采取通用的加密工具:

    pod 'FMDB/SQLCipher'

  2. 核心思路:打开数据库open -> 设置秘钥 setkey -> 查看连接 goodConnection -> 新建数据库并迁移数据,删除老的数据库;

  3. 新建继承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版本:
    
图片.png
  1. ~2.75版本:
图片.png
  1. 在需要加密的地方调用 :

    a. [FMEncryptDatabase setEncryptKey:@"秘钥"];

  2. 正常sql语句查询读取数据库数据;

    a.限制:此查询限制在[db close]前,当数据库关闭后再查询读取会报错 sqlite error :file is encrypted or is not a database

二、对不固定db进行加解密

前提:仅对数据库进行加解密,但不限制数据库的'增删改查';

注意点:
1.需要根据对应使用的数据库<sqlite3、FMDB、LKDB等>做open和close区分;
2.可以设置数据库自动close时间进行限制;

  1. 在[db open]的时候进行解密:
图片.png

图片.png
  1. 在[db close] 时候进行加密:
图片.png
图片.png
  1. 也支持修改数据库秘钥:
图片.png

二、项目混淆

代码混淆、控制流伪造、控制流扁平化、控制流简洁化、函数间接化、基本块分裂<见'待用'>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容