zoukankan      html  css  js  c++  java
  • ios开发FMDB导入SQLCipher加密数据库

        project用得FMDB做数据库的操作,后期要对数据库做加密,这里有两种方法:

         1.对数据库内容加密,存的时候加密,用得时候解密。

         2.直接对数据库文件加密。

         这里我选择了另外一种,原因不细说,自己决定。


         百度后,决定用SQLCipher,并且FMDB是支持SQLCipher的,官方配置说明地址 http://sqlcipher.net/ios-tutorial/   ,然后尝试,配置失败,并且使app包加大了非常多兆,所以

    不推荐。

         后来在FMDB官方发现了这个:

         


          即能够用cocoapods来安装支持SQLCipher加密数据库的FMDB包,假设您没用过cocoapods安装过第三方开源库,这里推荐一个教程,非常详

    细:http://code4app.com/article/cocoapods-install-usage

          到这里我们所做的就是要把 FMDB/SQLCipher  用cocoapods 安装到自己的project里。

          简单做法就是(接下来的步骤的前提是你的电脑上安装了cocoapods,请务必依照上面链接的教程配置好,否则以下步骤会失败):

          1.在您自己的project文件夹下新建一个文件Podfile,打开终端   输入命令行  $ vi Podfile  , 然后写入   pod ‘FMDB/SQLCipher ’, 然后保存退出

          2.命令行直接 输入  $pod update .

          然后等待直到出现:

          

    Analyzing dependencies
    Downloading dependencies
    Installing FMDB (2.3)
    Generating Pods project
    Integrating client project
    
    [!] From now on use `SqliteHasCcode.xcworkspace`.

        类似这种提示出现,标示成功安装,然后文件夹会变成类似这个样子:

         

      之后进入project都要点这个  .xcworkspace,进入后会是这个样子:

      


    之后加入加密代码:



    我是直接在FMDatabase.m里加的,这个看个人代码须要加的地方加就ok,通常是在数据库open之后就用这个 setKey 方法。


    然后编译,执行,不出意外是OK得,用第三方数据库管理工具验证是否加密,当导入加了密的数据库的时候,会直接提示 ‘数据是加密的’ 类似的话,假设用命令行的sqlite3 打开的话,是能够打开的,可是当用 .table 查看的时候,是看不见不论什么表的,入下图:



    但其实,这个数据库是有表有内容的, 这样就防止了我们数据库的数据外泄。


    接下来是还有一个重点:

    用cocoapods安装后,事实上是往我们的project里加入了另外一个projectPods,个人感觉非常不爽,于是决定,把它融合到我的project里。

    先看一下我移成功后的还有一个project的结构(这个project原来就是有fmdbproject文件的,可是不能加密,我的目的就是要把fmdb搞成支持加密的,应该非常多人的project都是要这个场景吧):



    不像是cocoapods 安装的那样,有两个proj,从文件上来说,仅仅多了sqlite3.h 和 sqlite3.m,然后FMDB文件还是你原来用得。这是我们终于要实现的样子,好了,乱入完成。


    開始:

    细致看用cocoapods 安装后的project结构:



    事实上和我们寻经常使用得FMDB相比較,仅仅是多了SQLCipher的这块的支持,那么我们仅仅要想办法,把这块单独移到我们之前已经有FMDB得project里就能够了


    SQLCipher文件夹下,有两个子文件夹,Support Files是配置文件,common是主代码文件。

    common下得两个文件,直接拖入到我们的project就可以,然后关键是这里的配置:

    1.pods-SQLCipher.xcconfig:

       

      看到嘛,OTHER_CFLAGS 和 OTHER_LDFLAGS  分别相应project里build settings的:

      Other c Flags :



    这个主要是一些编译宏。


    和other Linker Flags

    -framework  和 Security 是两个,是分开的,别搞成一个了。

    按pods-SQLCipher.xcconfig 配置文件中的配置把这两个地方改过来,如上图.

    2.pods-SQLCipher-Private.xcconfig



    这里的配置事实上没什么要改的

    GCC_PREPROCESSOR_DEFINITIONS 应该是设置编译器的一些什么,后面设为了COCOAPODS = 1, 我们就是为了去掉cocoapod的安装形式的,所以我感觉这个配置我们不用理,所以我也没有管。

    HEADER_SEARCH_PATHS ,不用配置,由于我们后来仅仅加了sqlite3.h, 和sqlite3.m 在我们的project文件夹下,到时候仅仅要包括 #import “sqlite3.h” 就ok

    OTHER_CFLAGS 和 OTHER_LDFLAGS 和PODS_ROOT 事实上就是用得pods-SQLCipher.xcconfig里的这几个的设置,所以pods-SQLCipher.xcconfig设置好这里也就好了。


    由于用cocoapods安装后,这里的这些配置是要使SQLCipherproject和主project的一些配置统一的,所以在移掉cocoapods安装的形式后,就不用管这些了。


    事实上简单步骤就是:

    1.在你有fmdb的project里,增加sqlite3.h 和 sqlite3.m

    2.在project的build setting里改动两个配置

       一个是other c flags ,如上面图的那个 other c flags

       一个是 other link flags , 入上图那个other lilnk flags 

    然后FMDatabase 的 setkey 方法就能够用了,在打开数据库后,调用此方法,数据库文件就加密ok了。

  • 相关阅读:
    搭建非域AlwaysOn win2016+SQL2016
    从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点)
    从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群)
    从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)
    从0开始搭建SQL Server AlwaysOn 第一篇(配置域控)
    四、基于Windows 2012配置SQL Server 2014 AlwaysOn
    三、安装SQLserver 2014(For AlwaysOn)
    二、 Windows 2012配置故障转移(For SQLServer 2014 AlwaysOn)
    Mybatis-SQL语句构建器类及日志
    Mybatis-JavaAPI
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4047864.html
Copyright © 2011-2022 走看看