(4.2.35)数据加密:SQLCipher和Conceal
来源:互联网 发布:淘宝网肚皮舞服装新款 编辑:程序博客网 时间:2024/05/21 22:55
在Android中,通常使用SQLite来管理本地数据。但是如果手机被ROOT了,用户能够轻易查看到SQLite数据库中的信息。如果数据库中包含用户私密信息或者APP的关键信息,那么也就能够轻易被其他人访问。现在这是所有开发不希望看见的。
这里讲两种数据加密方法。分别采用SQLCipher和ConCeal。并分别讲述这两种方法的优缺点。
一. SQLCipher
SQLCipher是在SQLite基础上进行扩展的开源数据库,它增加了数据加密功能,并且支持多种不同的平台。
首先需要下载Android项目所依赖的SQLCipher包,下载地址是:
https://s3.amazonaws.com/sqlcipher/SQLCipher+for+Android+v2.2.2.zip
解压压缩包,有assets和libs这两个目录,assets文件夹中有icudt461.zip,libs文件夹中有armeabi文件夹,下面有三个.so的文件。需要将这两个目录中的内容复制添加到需要加密数据库的Android项目的assets和libs文件夹中。
到此准备工作完毕,,我们需要建立一个SQLCipherDatabaseHelper继承自SQLiteOpenHelper,这里使用的不是Android API中的SQLiteOpenHelper,而是net.sqlcipher.database包下的SQLiteOpenHelper。代码如下:
我们引入的是net.sqlcipher.database.SQLiteOpenHelper在这段代码中,建立了一个书籍的表,分别记录书名name和页数pages。除了引入的包不一样,其他的用法和SQLite都是完全相同。 添加和查询数据的代码和SQLite是相同的。
在OnCreate()中,调用了SQLiteDatabase的loadLibs()静态方法将SQLCipher所以来的.so加载进来,注意引入的是net.sqlcipher.database下的SQLiteDatabase。然后我们创建了MyDatabaseHelper的实例,并调用getWritableDatabase()方法去获取SQLiteDatabase对象。这里在调用getWritableDatabase()方法的时候传入了一个字符串参数,它就是SQLCipher所依赖的key,在对数据库进行加解密的时候SQLCipher都将使用这里指定的key。
在添加数据按钮的点击事件里面,我们通过ContentValues构建了一条数据,然后调用SQLiteDatabase的insert()方法将这条数据插入到Book表中。
在查询数据按钮的点击事件里面,我们调用SQLiteDatabase的query()方法来查询Book表中的数据,查询到的结果会存放在Cursor对象中,注意这里使用的是net.sqlcipher包下的Cursor。然后对Cursor对象进行遍历,并将查询到的结果打印出来。
现在运行一下程序,先点击添加数据按钮,再点击查询数据按钮,刚刚添加的那条数据就应该在控制台里打印出来了。
SQLCipher提供的API与Android原生的API操作起来是几乎一模一样的,因为SQLCipher对Android SDK中所有与数据库相关的API做了一份镜像。这样开发者可以向操作普通数据库文件一样来操作SQLCipher,而所有的加密解密操作,对开发人员而言都是黑盒的,SQLCipher在背后帮我们做好了。
二。ConCeal
ConCeal是Facebook推出的用于对数据进行快速加密和认证的开发包,Facebook用它来加密手机、平板电脑SD卡中的数据和图片。能够高效快速地在磁盘上加密大文件,对于低版本的android系统、低内存、较慢的处理器,都有很好的效率。ConCeal的加密算法基于OpenSSL,经过编译之后,apk包大小只增加0.1MB左右,能够兼容众多Android版本,减少后期维护。
项目主页是:http://www.open-open.com/lib/view/home/1394779937806
Android的jar包下载地址:http://facebook.github.io/conceal/documentation/
ConCeal的加密代码判断是:
ConCeal的解密代码段是: 创建新的KeyChain。程序中有默认的KeyChain,但是也可以继承KeyChain以实现一个自己的KeyChain。 下面讲述ConCeal的具体实现1. 从http://facebook.github.io/conceal/documentation/中下载工程所需要的两个Jar包和so文件,分别点击ConCeal Jar、Android Jar与Native Binaries下载即可。将libconceal.jar与conceal_android.jar放入工程的libs文件夹下。下载的libs.rar解压后,把armeabi文件夹下的libconceal.so文件翻入自己工程libs文件夹下的armeabi文件夹下即可。
2. 加密
Entity应该是加密所使用秘钥。但是具体没有研究。3. 解密
在解密时,new Entity时使用的String必须与解密时相同,否则不能正确解密。4. 扩展
目前只是实现了加密String类型。其余类型没有实现。猜测JSON类型的应该也是可以的。这样的话,对于结构化的数据也能较好得加解密了。
三。总结
总结一下就是,SQLite对程序猿而言,只需要选择秘钥,其余查询、插入等数据库操作方法与SQLite几乎一模一样,以为它是SQLite的镜像,容易上手,加密结构化数据很便利。但是导入的jar包较大,会增加4MB左右apk大小。Conceal上手相对于SQLite而言,稍微慢一点点,加密大型的结构化的数据较为麻烦。但是体量小,对apk包大小影响很小,只增加0.1MB左右。如果进行快速小型的加密时,使用ConCeal较为方便。
- (4.2.35)数据加密:SQLCipher和Conceal
- android 加密 SQLCipher和Conceal
- (4.2.35.1)数据加密:Conceal
- (4.2.35.3)数据加密:SQLCipher
- Facebook 开源数据加密API-Conceal
- 加密工具 conceal使用
- sqlite 数据库加密(SQLCipher)
- sqlite 数据库加密(SQLCipher)
- Android数据存储之SQLCipher数据库加密
- Android数据存储之SQLCipher数据库加密
- Android数据存储之SQLCipher数据库加密
- 基于Sqlcipher和GreenDao的数据库加密
- Android数据库加密之旅,Sqlcipher操作现有数据,收获真的不少(良心干货)
- Android数据存储之Sqlite采用SQLCipher数据库加密实战
- LitePal结合SQLCipher实现DB数据库操作和加密
- SQLite加密库SQLCipher
- sqlite加密-SQLCipher
- sqlite加密-SQLCipher
- PAT-B 1024. 科学计数法
- Json和Xml数据解析
- python简单连接数据库
- ROS(indigo)swarm_robot 群机器人示例Gazebo
- 2016 cocoapods的安装和使用以及版本升级遇到的问题
- (4.2.35)数据加密:SQLCipher和Conceal
- 广播——有序广播优先级相同情况测试
- html5借助百度地图API来实现地理定位
- 测试用例设计需要注意的几个点
- iOS学习之—— UICollectionViewFlowLayout
- Android studio远程主机强迫关闭了一个现有的连接(夜神模拟器)
- linux 下scandir显示指定目录下文件代码 c 实现
- C语言培训_010
- svn: Invalid authz configuration