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.需要根据对应使用的数据库做open和close区分;
2.可以设置数据库自动close时间进行限制;

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

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

你可能感兴趣的:(iOS - 信息安全之数据库加密)