最近由于一些项目的安全性须要将数据库加密,一开始想到的就是先将数据库经过AES加密,而后运行时再解密,另外一种是将数据库里的内容加密。 android
很快这两种方案都是不理想的,第一种加密方式形同虚设,第二种,若是加密的字段是要查找数据就变得麻烦。 git
因此第三种方案就是在内存里解密,在网上查到SQLITE是支持加密的, 因此就根据网上的指导一步步地将SQLITE编译成支持加密的。 github
那下一步就是怎样作成SDK去方便使用?第一个念头就是将原生的数据库使用方式移植过来,但作起来比开始想像的难了点,但最终也在修修补补中完成了移植工做。一开始是使用Android2.2的数据库模块源码,但运行时会常常有一些问题出现,后来使用Android4.0的数据库模块源码就解决了这些问题,固然,在开始是在Android4.0源码编译时,在Android4.0以上的手机运行是没问题,但在Android4.0如下就会报错。因此逼不得意就将Android4.0数据库模块移到Android2.2源码目录下编译,固然少不了要解决版本兼用的一些问题。 sql
Android原生是不支持数据库加密的,因此要想加密数据库就须要使用其它的方式。而这个SDK是从原生Android4.0源码里单独移植SQLITE模块,并将这个模块编译时加入加密方法,由于SQLITE源码中是有加密的接口,因此移植时就只需将这个预编译参数加入和一些文件便可。 数据库
这个SDK只支持Android2.1以上的版本。 安全
编译环境:
Android2.2源码
Ubuntu12.10 64位
一、同步Android2.2源码(大概4G容量)
二、安装必需的依赖库
三、在Android2.2源码目录下运行:
ui
这样就能够编译,生成结果在out\target\product\generic\system\lib\libsqlcrypt_jni.so 加密
原本还想生成x86的库,由于出现一些问题,还没空去解决。 spa
源码下载地址:https://github.com/lendylongli/android-sqlite-encrypt .net