美文网首页iOSiOS 数据处理iOS扩展
对FMDB加密-SQLCipher如何使用

对FMDB加密-SQLCipher如何使用

作者: Kan__ | 来源:发表于2016-03-24 11:09 被阅读2302次

    根据公司需求需要对数据库加密,公司使用FMDB做的数据库,上网查看了许多博客发现不少坑,总结一下如何使用SQLCipher

    Demo下载地址-本人写的LKFMDBFMDB面向对象封装支持SQLCipher加密,操作简单完全面向对象封装。

    简书地址

    加密步骤

    pod使用步骤

    1. 首先你的数据库必须使用FMDB
    2. github下载,你会在里面发现原来他是支持pod的,所以你可以直接pod 'FMDB/SQLCipher' # FMDB with SQLCipher
    3. 然后就是pod install,如果被墙了就用pod install --verbose --no-repo-update
    4. 这样的你的工程就有SQLCipher文件了
    5. 这样数据库还是没有加密的因为默认是不加密的所以你必须在FMDatabase.m大约在150行和177行左右加上下面这几句话
    //不需要加密请注释掉下面三行代码
        else{
            [self setKey:DB_SECRETKEY];
        }
    

    DB_SECRETKEY是宏也就是秘钥
    截图说明

    FMDatabase.m

    但是许多项目是不怎么使用pod的,所以需要直接拖入工程里面

    有的项目原来就是有fmdb工程文件的,但是不能加密,我的目的就是要把fmdb搞成支持加密的,应该很多人的工程都是要这个场景吧

    1. 准备工作首先你的工程是有FMDB的,同时也有SQLCipher
    2. 我们把准备好的SQLCipher文件下sqlite3.csqlite3.h拖入到需要加密的工程,这样就OK了
    3. 重复上面的第5步
    4. 关键步骤来了 关键步骤来了 关键步骤来了
      要在工程里设置两个地方
      第一个地方-Other c Flags
    -DSQLITE_HAS_CODEC
    -DSQLITE_THREADSAFE
    -DSQLCIPHER_CRYPTO_CC
    -DSQLITE_TEMP_STORE=2
    
    第二个地方-other Linker Flags

    在这个地方需要注意网上的有博客是 Security -framework 这样的顺序但是编译的时候会报错。

    总结一下

    其实简单步骤就是:
    1.在你有fmdb的工程里,加入sqlite3.h 和 sqlite3.m
    2.在工程的build setting里修改两个配置
    一个是other c flags ,如上面图的那个 other c flags
    一个是 other link flags , 入上图那个other lilnk flags
    然后FMDatabase 的 setkey 方法就可以用了,在打开数据库后,调用此方法,数据库文件就加密ok了。

    你在打开数据库会发现打开数据提示

    加密后的数据库提示

    日了狗了输入秘钥也打不开,然而就是这样。问我为什么我也不知道,反正在程序工是可以用代码操作读取数据库的。

    最后是不是在使用FMDB特别繁琐要写一堆SQL语句

    Demo下载地址-githubLKFMDB本人对FMDB面向对象封装支持SQLCipher加密,操作简单完全面向对象封装。

    简书地址

    相关文章

      网友评论

      • 达菲栀子:你好,添加.h、.c文件后,sqlite3.c文件报错,'openssl/rand.h' file not found
        请问大家也有遇到这个问题吗
      • 阿斯顿卡卡:我的为啥没有 提示我输入密码的提示框呢
      • Pluto_Cumt:我安装的是SQLCipher (3.1.0)为什么在FMDatabase.m 的open 方法中就是你说的 150行和177行左右 找不到你说的代码
      • 男神已认证:对一个已经存在的数据进行加密要该怎么做?
        Kan__:@男神已认证 不需要特别复杂操作导入SQLCipher 设置秘钥就好了
      • 863c73f31933:作者我这边项目里面就有fmdb了,需要加入sqlcipher来加密,我这边就是按照你上面的步骤,把sqlite3.c和sqlite3.h加入项目中,添加了other c flags other和linker flags的引用,但是工程里面报错了?作者知道要怎么改不?
        863c73f31933:感谢作者,我下你gith上面的demo,用你demo里面的文件替换了我从官网上下载的sqlite3.h,sqlite3.c两个文件之后就不报错了,作者你有在那两个文件中修改了什么?
        863c73f31933:报错的文件在sqlite3.c文件里面,有10几个。
      • KingStarWMX:那个SQLCipher文件夹里面有个sqlite3文件,5M多,好大啊
      • Hom_zhang:如果是已运行的项目上,将未加密的数据库进行加密也可以么?需要迁移吗?

        还有作者和LKDBHelper有什么关系呀
        Hom_zhang:@Kan__ 非常感谢!如果能写一个如何迁移就更好了。
        Kan__:@Hom_zhang 我记得fmdb有个转换数据库方法changeDatabasePath,重写弄一个数据库新数据库加密。这用。迁移方法是最简单的,如果对原数据库加密我是没有试过,希望对你有用。
        Kan__:@Hom_zhang 需要做数据迁移的。 LKDBHelper也是我写的是fmdb封装运用到了sqlcipher加密

      本文标题:对FMDB加密-SQLCipher如何使用

      本文链接:https://www.haomeiwen.com/subject/ndrrlttx.html