1、sqlite中的数据进行加密。对数据库中插入的字段内容先进行AES,MD5等加密后在插入到数据库中,在使用时先从数据库中取出数据,然后在解密在使用这种方式好是好,但是有些致命的问题不能绕过,如果要对某个字段进行模糊查询 *** 作,那么该字段就不能加密,否则的话你不能对该字段进行模糊查询 *** 作,这样一来该字段还是要暴漏出来,别人还是能看到一些东西的。
2、SQLCipher开源框架。使用第三方库的开源库,SQLCipher这个开源框架不错,SQLCipher是一个在SQLite基础之上进行扩展的开源数据库。
用SQLCipher进行数据库加密。SQLite目前已经是比较流行的数据存储 *** 作的API了。Android和iOS系统提供的API中 *** 作数据库默认均采用了SQLite方案。而SQLCipher是基于SQLite的加密数据库存取方案,集成相对比较快捷而且透明,在一定程度上保证了数据的安全。
代码设置:
如果你用的是系统sqlite3的API,则代码基本不用变,因为SQLCipher是基于系统的sqlite3API扩展的;
如果你用的是FMDB,更无需担心,因为FMDB是封装的系统sqlite3API;
唯一需要做的,就是初始化打开数据库文件sqlite3_open之后,紧跟着执行sqlite3_key设置数据库加密的密钥,于是sqlcipher集成工作就完成了。如果你用的是FMDB,可以直接用setKey方法;如果不是,也可以去FMDataBase.m源码中拷贝这个方法的逻辑,方便调用
使用sqlite3_key_v2函数设置秘钥后,在对数据库的所以 *** 作都是加密的
设置加解密数据库文件的秘钥。
SQLITE_API int SQLITE_STDCALL sqlite3_key_v2(
sqlite3 *db,
const char *zDbName,
const void *pKey,
int nKey
)
db:数据库连接句柄
zDbName:数据库名称
pKey:秘钥
nKey:秘钥长度
注释:
db
数据库连接句柄。此句柄必须是由 sqlite3_open函数, sqlite3_open16函数或 sqlite3_open_v2函数返回。
zDbName
数据库名称。数据库名称为主数据库的“main”,临时数据库的“temp”或在附加数据库的ATTACH语句中的AS关键字后指定的名称。
pKey
秘钥。
nKey
秘钥长度。注:预留接口需要程序自己实现。
返回值:
返回值详见“SQLite 返回值与错误代码”。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)