借鑒:http://www.reibang.com/p/22ee2a751e02
一错沃、對固定db進行加解密
前提:此種加密db不需要進行'增刪改'等操作蜈漓,僅提供'查'的權(quán)限;
采取通用的加密工具:
pod 'FMDB/SQLCipher'
核心思路:打開數(shù)據(jù)庫open -> 設(shè)置秘鑰 setkey -> 查看連接 goodConnection -> 新建數(shù)據(jù)庫并遷移數(shù)據(jù)矫膨,刪除老的數(shù)據(jù)庫;
新建繼承FMDatabase的子類LCEncryptDatabase:
a.重寫父類四個函數(shù)率碾,新增一個函數(shù):1.`-(BOOL)open性穿;`2.`-(BOOL)openWithFlags:(int)flags;`3.`-(BOOL)openWithFlags:(int)flags vfs:(NSString*)vfsName隧膘;`4.`-(constchar*)sqlitePath;`5.`-(void)setEncryptKey:(NSString*)encryptKey`寺惫;b.不同版本的FMDB對應(yīng)的重寫方法不一致疹吃,下列拿2.5和2.75兩個版本舉例參考:1.~2.5版本:
~2.75版本:
在需要加密的地方調(diào)用 :
a.[FMEncryptDatabase setEncryptKey:@"秘鑰"];
正常sql語句查詢讀取數(shù)據(jù)庫數(shù)據(jù);
a.限制:此查詢限制在[db close]前西雀,當數(shù)據(jù)庫關(guān)閉后再查詢讀取會報錯sqlite error :file is encrypted or is not a database萨驶;
二、對不固定db進行加解密
前提:僅對數(shù)據(jù)庫進行加解密蒋搜,但不限制數(shù)據(jù)庫的'增刪改查'篡撵;
注意點:
1.需要根據(jù)對應(yīng)使用的數(shù)據(jù)庫做open和close區(qū)分判莉;
2.可以設(shè)置數(shù)據(jù)庫自動close時間進行限制豆挽;
在[db open]的時候進行解密:
圖片.png
在[db close] 時候進行加密:
也支持修改數(shù)據(jù)庫秘鑰:
作者:Mn_Su
鏈接:http://www.reibang.com/p/22ee2a751e02