Android本身自带有不加密的数据库SQLite,如果要保存密码之类的敏感数据在本地的话方法一是使用字段加密解密算法,方法二是整个数据库都加密掉。如果只是加密解密某个字段(如数据库)就推荐使用第一种方法,轻便易用;如果想要整个数据库都加密的话,就推荐方法二了,使用其他的数据库SQLite,如SQLCipher,其是实现加密了的SQLite数据库,使用方法与Android自带的大部分一样,就需要注意以下步骤,否则加密不成功。
这里讲的是SQLCipher for Android v2.2.2版本,使用的是AES加密,本人通过自己的探索和文章参考总结出来一下步骤和注意事项。
- 官方下载最新版本:http://sqlcipher.net/,本文所讲版本实现加密功能后增大了6MB,最新版本比较大,但是能保证对Android版本的兼容性。
源文件(可自由编译):
git clone https://github.com/sqlcipher/android-database-sqlcipher.git
二进制文件:SQLCipher For Android
- 下载好二进制文件解压后,将里面对应的.zip、.so、.jar文件复制到对应的工程文件夹,如assets文件夹里的icudt46l.zip复制到工程的assets文件夹,完成,应该是与喜爱的样子:
- 接下来,针对libs文件夹里面加入的三个jar包(commons-codec.jar, guava-r09.jar 和 sqlcipher.jar)来Build path,如图:
- 接下来如果你已经使用了Android自带的SQLite数据库,那么这部就是替换工作,否者就是包引用工作,即将android.database.sqlite.SQLiteDatabase的import替换为net.sqlcipher.database.SQLiteDatabase,如果实现了SQLiteOpenHelper也要修改为import net.sqlcipher.database.SQLiteOpenHelper,反正就是import中包含android.database.sqlite.*都替换成info.guardianproject.database.sqlite.*。import
android.database.Cursor则不需要替换。
- 接下来的关键一步是添加加密密匙,添加方法是实现getWritableDatabase("thisismyencryptstringkey"),参数是字符串类型,如果为""的话表示不加密,这里要注意的是不能包含逗号否者也是实现不了加密的。
- 接下来在使用数据库的Activity,至少需要加入引入一下import(假设有DBManger或者DBHelper之类的封装工具,其要多加入import net.sqlcipher.database.SQLiteOpenHelper,来通过SQLiteOpenHelper声明、创建数据库):
import net.sqlcipher.database.SQLiteDatabase;
- 接下来还是关键一步,还是在Activity,里面的onCreate方法加入,而且应该是最先加入的(要早于实例化数据库,这个是为了引入包里面的so文件以进行引用,否者会出现各种implementation、dbopen、UnsatisfiedLinkError的问题):
SQLiteDatabase.loadLibs(this);
- 完成,测试吧,骚年!
关于SQLCipher的编译,可参考:
1、为跨平台数据库引擎 SQLite 实现加密扩展https://sites.google.com/site/notegainexp/sqlite/weikuapingtaishujukuyinqingsqliteshixianjiamikuozhan
2、SQLite加密--SQLCipherhttp://stormzhang.github.io/blog/2013/06/16/sqlite-encrypt/
分享到:
相关推荐
sqlcipher加密sqlite数据库练习,内附练习笔记和原始的教程笔记。
使用Sqlcipher对sqlite数据库进行加解密
请参考:http://www.apkbus.com/forum.php?mod=viewthread&tid=165106 修改了 ormlite 源码整合了sqlcipher 可对数据库进行加密。 DBHelper 类中设置密匙.
CppSQLite是开源sqlite3的C++封装类 sqlcipher 是sqlite3的加密模块,目前是支持openssl 附件里面带了可测试案例
编译好的sqlcipher nw版本0.48.0,32位
sqlcipher 可设置sqlite数据库密码,都已经编译好,32,64位均已编译最新版本源码,sqlcipher4加密与sqlcipher3加密不同
Android studio+SQLCipher加密SQLite数据库的几个坑-附件资源
sqlcipher3.0.1数据库解密工具
SystemDataSqlite.To.SqlCipher 一种将System.Data.SQLite加密的Sqlite数据库迁移到SQLCipher加密的数据库的工具
解密 android-database-sqlcipher:3.5.7生成的加密数据库文件,可拿来直接用,方法简单有效
①可以获取到关于Sqlite数据库的2种常用连接字符串【不加密、加密】(也可以自己传入); ②可以代码直接创建Sqlite数据库; ③可以直接创建Sqlite数据库的表; ④实现了通用的sql语句执行帮助类(包含单条数据的...
SQLcipher.exe,SQLite数据库管理工具,可打开加密的sqlite数据库文件,版本2.1
win10系统编译的sqlcipher执行工具,库,头文件,可加密sqlite数据库; VS2017 x64编译sqlcipher-4.0.1,sqlcipher可执行,如果执行失败,将libcrypto-1_1-x64.dll放在C:\Windows\System32\文件夹下。 库和头文件...
sqlcipher-3.0.1加解密数据库,自己亲自用了,没有问题,不能直接解密出来,配合sqlcipher-3.0.1相关命令就可以了,命令我也贴上来了: C:\Users\sqlcipher>d: //1.切换到你下载的sqlcipher-3.0.1目录上 D:\>cd...
SQLCipher加密数据库..是一个方便快捷的数据库加密解决方案,由于使用之后,apk文件会变得很大,所以谨慎使用
最近做一个项目使用到SQLite数据库,但免费版的没有加密功能,手写一个加密程序,解密将新密码设置为空即可.详情参见本人使用说明博客
SQLCipher is an Open Source SQLite extension that provides transparent 256-bit AES full database encryption 数据库查看工具 sqlcipher
编译后的sqlcipher.exe文件,自己搭建环境编译比较麻烦,特此奉上方便大家使用
SQLCipherDemo,介绍了如何使用SQLCipher加密sqlite数据库。