一直使用sqlite来管理本地的数据,但是Xcode中的SDK中集成的sqlite是免费的,不提供加密模块,但是程序中用到的很多数据,有时候是不想让别人看到,一开始虑修改sqlite的源码,自己重新编译sqlite生成一个带加密模块的静态库,找了一下相关资料,需要修改源码中的makefile和自己实现加密算法等东西,折腾了一下,无果,就果断放弃了。此路不通,那就想别的办法来实现加密功能:现在找到3中方法来实现数据库加密的功能

方法一、对sqlite中的数据进行加密:

就是对数据库中插入的内容先进行aes、MD5等加密后在插入到数据库中,在使用时先从数据库中取出数据,然后在解密在使用这种方式好是好,但是有些致命的问题不能绕过,就是你如果要对某个字段进行模糊查询操作,那么该字段就不能加密,否则的话你不能对该字段进行模糊查询操作;这样一 来该字段还是要暴漏出来,别人还是能看到一些东西.

方法二、对插入的数据进行简单的字符替换 :

在插入数据之前,先将一些字符用特定的字符替换掉,在使用的时候在替换回来,对与全是字符集的字段这样操作,也不会影响模糊查询操作(查询之前先用特定字符将输入据替换,在用替换后的数据进行模糊查询,这样就不会有什么影响,同时你也可以用方法一对非查询字段进行加密;这种方法也有个致命的缺点,就是如果你查询的字段是中文的话,这个字符替换就是个大问题,不好解决.

方法三、使用第三方库的开源库,实现对sqlite数据库的加密找来找去,SQLCipher这个开源框架不错,相关使用方法可以参考官方的文档,说的很详细,照着一步一步的做就可以了http://sqlcipher.net/ios-tutorial/ 官方的地址, 同时你可以参考一下这个blog http://blog.csdn.net/kuai0705/article/details/8931996,一些地方不是太详细,以官方文档为主

如果在编译时提示:

No architectures to compile for (ARCHS=armv6,armv7, VALID_ARCHS=armv7 armv7s则将在Bulid Settings选项下面的Architectures和Valid Architectures里面都改成一样(例如:都填写 armv6 armv7),问题解决。 对于警告 :

warning: implicit declaration of function 'sqlite3_key' is invalid in C99 只需要将Bulid Settings选项下的C Language Dialect 改为:C89[-std-c89] 就可以,即使用c89标准

sqlite加密的更多相关文章

  1. SQLite 加密 -- SQLCipher

    SQLite3 插件 github 下载地址 插件配置步骤地址 购买地址 其他加密方式介绍 SQLCipher API 地址 前言 应用使用 SQLite 来存储数据,很多时候需要对一部分的数据进行加 ...

  2. SQLite加密方式 [转]

    关于SQLite SQLite是一个轻量的.跨平台的.开源的数据库引擎,它的在读写效率.消耗总量.延迟时间和整体简单性上具有的优越性,使其成为移动平台数据库的最佳解决方案(如iOS.Android). ...

  3. Android中对sqlite加密--SQLCipher

    原文:Android中对sqlite加密--SQLCipher android中有些时候会将一些隐私数据存放在sqlite数据库中,在root过的手机中通过RE就能够轻松的打开并查看数据库所有内容,所 ...

  4. SQLite加密 wxSqlite3

    一直在网上搜wxSqlite3的文档,但是总找不到能真正解决问题的,就是一个简单的编译wxSqlite3自带的示例也出了老多问题,后来却发现,其实wxSqlite3的readme中已经有了详细的方法, ...

  5. SQLite加密的方法(c#)

    http://blog.csdn.net/xjbx/article/details/2712236 设置下密码就可以了 http://bbs.csdn.net/topics/380018685 编译为 ...

  6. Android数据库(sqlite)加密方案

    最近因为一些项目的安全性需要将数据库加密,一开始想到的就是先将数据库通过AES加密,然后运行时再解密,另一种是将数据库里的内容加密. 很快这两种方案都是不理想的,第一种加密方式形同虚设,第二种,如果加 ...

  7. iOS Sqlite加密(FMDB/SQLCipher)

    /** * 对数据库加密 * * @param path path description * * @return return value description */ + (BOOL)encryp ...

  8. SQLite XXTea加密学习

    这几天优化数据库读写,移植了xxtea加密到最新的数据库sqlite 3.12.2里,一些好文章放在这里.移植后,数据库读写性能异常优秀! 这几天又发现,数据库还是发生了无法写入情况,数据库崩溃掉了. ...

  9. 加密你的SQLite

    转自王中周的个人博客 关于SQLite SQLite是一个轻量的.跨平台的.开源的数据库引擎,它的在读写效率.消耗总量.延迟时间和整体简单性上具有的优越性,使其成为移动平台数据库的最佳解决方案(如iO ...

随机推荐

  1. C# 英式日期插入Access数据库错误问题

    插入数据库语句如下 string insertSql = string.Format("insert into info(MeasureIDID,Val,UpdateTime) select ...

  2. WebDriver中启动不同的浏览器

    import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.firefox.FirefoxDriver; im ...

  3. Oracle官方文档在线查看

    1.9i Oracle官方文档在线查看 http://www.oracle.com/pls/db92/homepage 2.10g Oracle官方文档线查看 http://www.oracle.co ...

  4. docker offical docs:Working with Docker Images

    Working with Docker Images ##orignal is always the best In the introduction we've discovered that Do ...

  5. 定制对ArrayList的sort方法的自定义排序

    java中的ArrayList需要通过collections类的sort方法来进行排序 如果想自定义排序方式则需要有类来实现Comparator接口并重写compare方法 调用sort方法时将Arr ...

  6. mongodb的基本操作与插入文档(document)

    一.mongodb的基本操作: 1.查看mongodb当前所有的databases : show dbs 2.选择数据库(database) : use databaseName(该数据库不存在则会自 ...

  7. 在Ubuntu 64位OS上运行hadoop2.2.0[重新编译hadoop]

    最近在学习搭建Hadoop, 我们从Apache官方网站直接下载最新版本Hadoop2.2.官方目前是提供了linux32位系统可执行文件,结果运行时发现提示 “libhadoop.so.1.0.0 ...

  8. java io读书笔记(2)什么是stream

    什么是stream?stream就是一个长度不确定的有序字节序列. Input streams move bytes of data into a Java program from some gen ...

  9. 关于GridView只显示一样的问题

    如果GridView不管怎么改都只能显示一行的话,就重写GridView,自定义GridView: public class MyGridView extends GridView { public ...

  10. c++之路进阶——codevs1286(郁闷的出纳员)

    1286 郁闷的出纳员 2004年NOI全国竞赛  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Master       题目描述 Description OIER公司 ...