zoukankan      html  css  js  c++  java
  • 【转】Android SQLite加密

    原文地址:http://blog.csdn.net/feifei454498130/article/details/8843402

    最近因为一些项目的安全性需要将数据库加密,一开始想到的就是先将数据库通过AES加密,然后运行时再解密,另一种是将数据库里的内容加密。

    很快这两种方案都是不理想的,第一种加密方式形同虚设,第二种,如果加密的字段是要查找数据就变得麻烦。

    所以第三种方案就是在内存里解密,在网上查到SQLITE是支持加密的, 所以就根据网上的指导一步步地将SQLITE编译成支持加密的。

    那下一步就是怎样做成SDK去方便使用?第一个念头就是将原生的数据库使用方式移植过来,但做起来比开始想像的难了点,但最终也在修修补补中完成了移植工作。一开始是使用Android2.2的数据库模块源码,但运行时会经常有一些问题出现,后来使用Android4.0的数据库模块源码就解决了这些问题,当然,在开始是在Android4.0源码编译时,在Android4.0以上的手机运行是没问题,但在Android4.0以下就会报错。所以逼不得意就将Android4.0数据库模块移到Android2.2源码目录下编译,当然少不了要解决版本兼用的一些问题。

    Android原生是不支持数据库加密的,所以要想加密数据库就需要使用其它的方式。而这个SDK是从原生Android4.0源码里单独移植SQLITE模块,并将这个模块编译时加入加密方法,因为SQLITE源码中是有加密的接口,所以移植时就只需将这个预编译参数加入和一些文件即可。

    这个SDK只支持Android2.1以上的版本。

    编译环境:
    Android2.2源码
    Ubuntu12.10 64位


    1、同步Android2.2源码(大概4G容量)
    2、安装必需的依赖库
    3、在Android2.2源码目录下运行:

    $. build/envsetup.sh  


    这样就可以初始化环境
    4、去到这个源码目录,运行:

     

    $mm  

    这样就可以编译,生成结果在out argetproductgenericsystemliblibsqlcrypt_jni.so

    本来还想生成x86的库,因为出现一些问题,还没空去解决。

    源码下载地址:https://github.com/lendylongli/android-sqlite-encrypt

  • 相关阅读:
    elipse图标注解
    Thrift源码解析--transport
    IDL和生成代码分析
    thrift概述
    less分页阅读
    this与super使用总结(java)
    more分页阅读
    Arrays
    Teigha克隆db的blockTableRecord里面的一个实体
    Teigha的BlockTableRecord获取方法
  • 原文地址:https://www.cnblogs.com/chenlong-50954265/p/5175430.html
Copyright © 2011-2022 走看看