sqlite 数据库加密SQLCipher

  1. 一直使用sqlite来管理本地的数据,但是Xcode中的SDK中集成的sqlite是免费的,不提供加密模块,但是程序中用到的很多数据,有时候是不想让别人看到,一开始虑修改sqlite的源码,自己重新编译sqlite生成一个带加密模块的静态库,找了一下相关资料,需要修改源码中的makefile和自己实现加密算法等东西,折腾了一下,无果,就果断放弃了。此路不通,那就想别的办法来实现加密功能:现在找到3中方法来实现数据库加密的功能
  2. 方法一、对sqlite中的数据进行加密:
  3. 就是对数据库中插入的内容先进行aes、MD5等加密后在插入到数据库中,在使用时先从数据库中取出数据,然后在解密在使用这种方式好是好,但是有些致命的问题不能绕过,就是你如果要对某个字段进行模糊查询操作,那么该字段就不能加密,否则的话你不能对该字段进行模糊查询操作;这样一来该字段还是要暴漏出来,别人还是能看到一些东西的
  4. 方法二、对插入的数据进行简单的字符替换:
  5. 在插入数据之前,先将一些字符用特定的字符替换掉,在使用的时候在替换回来,对与全是字符集的字段这样操作,也不会影响模糊查询操作(查询之前先用特定字符将输入据替换,在用替换后的数据进行模糊查询,这样就不会有什么影响,同时你也可以用方法一对非查询字段进行加密;这种方法也有个致命的缺点,就是如果你查询的字段是中文的话,这个字符替换就是个大问题,不好解决
  6. 方法三、使用第三方库的开源库,实现对sqlite数据库的加密找来找去,sqlCipher这个开源框架不错,相关使用方法可以参考官方的文档,说的很详细,照着一步一步的做就可以了http://sqlcipher.net/ios-tutorial/官方的地址,同时你可以参考一下这个bloghttp://blog.csdn.net/kuai0705/article/details/8931996,一些地方不是太详细,以官方文档为主
  7. 如果在编译时提示:Noarchitecturestocompilefor(ARCHS=armv6,armv7,VALID_ARCHS=armv7armv7s则将在BulidSettings选项下面的Architectures和ValidArchitectures里面都改成一样(例如:都填写armv6armv7),问题解决。对于警告:warning:implicitdeclarationoffunction'sqlite3_key'isinvalidinC99只需要将BulidSettings选项下的CLanguageDialect改为:C89[-std-c89]就可以,即使用c89标准

相关文章

SQLite架构简单,又有Json计算能力,有时会承担Json文件/RES...
使用Python操作内置数据库SQLite以及MySQL数据库。
破解微信数据库密码,用python导出微信聊天记录
(Unity)SQLite 是一个软件库,实现了自给自足的、无服务器...
安卓开发,利用SQLite实现登陆注册功能