time 
设为首页】【收藏本站
当前位置: 主页 > 电脑网络 > 操作系统 > 嵌入式 > Android > Android使用SQLCipher加解密数据库

Android使用SQLCipher加解密数据库

时间:2014-06-20 09:21 点击:1700次 字体:[ ]




我们都知道,Android系统内置了SQLite数据库,并且提供了一整套的API用于对数据库进行增删改查操作。数据库存储是我们经常会使用到的一种存储方式,相信大多数朋友对它的使用方法都已经比较熟悉了吧。在Android中,我们既可以使用原生的SQL语句来对数据进行操作,也可以使用Android API提供的CRUD方法来对数据库进行操作,两种方式各有特点,选择使用哪一种就全凭个人喜好了。
 

不过,使用SQLite来存储数据却存在着一个问题。因为大多数的Android手机都是Root过的,而Root过的手机都可以进入到/data/data/<package_name>/databases目录下面,在这里就可以查看到数据库中存储的所有数据。如果是一般的数据还好,但是当涉及到一些账号密码,或者聊天内容的时候,我们的程序就会面临严重的安全漏洞隐患。那么今天,就让我们一起研究一下如何借助SQLCipher来解决这个安全性问题。
 

SQLCipher是一个在SQLite基础之上进行扩展的开源数据库,它主要是在SQLite的基础之上增加了数据加密功能,如果我们在项目中使用它来存储数据的话,就可以大大提高程序的安全性。SQLCipher支持很多种不同的平台,这里我们要学习的自然是Android中SQLCipher的用法了。

下面我们就开始吧,首先要把Android项目所依赖的SQLCipher工具包下载下来,下载地址是:

https://s3.amazonaws.com/sqlcipher/SQLCipher+for+Android+v2.2.2.zip
 

接着解压这个工具包,会看到里面有assets和libs这两个目录,稍后需要将这两个目录中的内容添加到Android项目当中。那么现在我们就来新建一个Android项目,项目名就叫SQLCipherTest。
 

观察SQLCipherTest的项目结构,发现里面也分别有一个assets目录和一个libs目录,那么现在就可以把SQLCipher工具包中这两个目录里的内容复制过来。并不需要复制全部文件,选择必要的文件进行复制就可以了,完成以后项目结构图如下所示,图中显示的文件都是必要的。
 

                            Android使用SQLCipher加解密数据库_www.fengfly.com
 

到这里准备工作就全部完成了,接下来我们开始编写代码。首先创建一个MyDatabaseHelper继承自SQLiteOpenHelper,注意这里使用的并不是Android API中的SQLiteOpenHelper,而是net.sqlcipher.database包下的SQLiteOpenHelper,代码如下所示:

  1. import android.content.Context;  
  2. import net.sqlcipher.database.SQLiteDatabase;  
  3. import net.sqlcipher.database.SQLiteDatabase.CursorFactory;  
  4. import net.sqlcipher.database.SQLiteOpenHelper;  
  5.  
  6. public class MyDatabaseHelper extends SQLiteOpenHelper {  
  7.       
  8.     public static final String CREATE_TABLE = "create table Book(name text, pages integer)";  
  9.  
  10.     public MyDatabaseHelper(Context context, String name, CursorFactory factory, int version) {  
  11.         super(context, name, factory, version);  
  12.     }  
  13.  
  14.     @Override 
  15.     public void onCreate(SQLiteDatabase db) {  
  16.         db.execSQL(CREATE_TABLE);  
  17.     }  
  18.  
  19.     @Override 
  20.     public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {  
  21.  
  22.     }  
  23.  
  24. }  

除了引入的包不一样了,其它的用法和传统的SQLiteOpenHelper都是完全相同的。可以看到,我们在onCreate()方法中创建了一张Book表,Book表里有name和pages这两个列。

 

接着,打开或新建activity_main.xml作为程序的主布局文件,代码如下所示:

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  2.     android:layout_width="match_parent" 
  3.     android:layout_height="match_parent" 
  4.     android:orientation="vertical" > 
  5.       
  6.     <Button   
  7.         android:id="@+id/add_data" 
  8.         android:layout_width="match_parent" 
  9.         android:layout_height="wrap_content" 
  10.         android:text="添加数据" 
  11.         /> 
  12.       
  13.     <Button   
  14.         android:id="@+id/query_data" 
  15.         android:layout_width="match_parent" 
  16.         android:layout_height="wrap_content" 
  17.         android:text="查询数据" 
  18.         /> 
  19.  
  20. </LinearLayout> 



本文地址 : http://www.fengfly.com/plus/view-215103-1.html
标签: Android SQLCipher
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码: