Android使用SQLCipher对SQLite数据库进行加密

简介: MainActivity如下: package cc.testsqlcipher;import net.sqlcipher.Cursor;import net.

MainActivity如下:

package cc.testsqlcipher;

import net.sqlcipher.Cursor;
import net.sqlcipher.database.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.app.Activity;
/**
 * Demo描述:
 * 使用SQLCipher对SQLite数据库进行加密
 * 
 * 参考资料:
 * 1 http://blog.csdn.net/guolin_blog/article/details/11952409
 * 2 http://blog.csdn.net/zhuawami/article/details/9038003
 *   Thank you very much
 */
public class MainActivity extends Activity {
	private Button mAddButton;
    private Button mQueryButton;
    private SQLiteDatabase mSqLiteDatabase;
    private SQLCipherOpenHelper mSqlCipherOpenHelper;
    private final String SECRET_KEY="95279527";
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		initView();
		initDataBase();
	}

	private void initView(){
		mAddButton=(Button) findViewById(R.id.addButton);
		mAddButton.setOnClickListener(new ClickListenerImpl());
		mQueryButton=(Button) findViewById(R.id.queryButton);
		mQueryButton.setOnClickListener(new ClickListenerImpl());
	}
	
	private void initDataBase() {
		//加载libs/armeabi中的so
        SQLiteDatabase.loadLibs(this);
        //获取到SQLiteOpenHelper
        mSqlCipherOpenHelper=new SQLCipherOpenHelper(this);
        //设置打开数据库的密码SECRET_KEY
		mSqLiteDatabase = mSqlCipherOpenHelper.getWritableDatabase(SECRET_KEY);  
	}
	
	private class ClickListenerImpl implements OnClickListener {
		private Person person;
		@Override
		public void onClick(View v) {
			switch (v.getId()) {
			case R.id.addButton:
				for (int i = 0; i < 15; i++) {
					person = new Person("xiaoming" + i, "9527" + i);
					addData(person);
				}
				break;
			case R.id.queryButton:
                person=queryData(8);
                System.out.println(""+person.toString());
				break;
			default:
				break;
			}
		}

	}
	
	public void addData(Person person) {
		mSqLiteDatabase.execSQL("insert into person (name,phone) values(?,?)",
				                 new Object[] {person.getName(), person.getPhone() });

	}
	
	public Person queryData(int id){
		Cursor cursor=mSqLiteDatabase.rawQuery("select * from person where personid=?", 
				                                new String[]{String.valueOf(id)});
		while(cursor.moveToFirst()){
			int personid=cursor.getInt(cursor.getColumnIndex("personid"));
			String name=cursor.getString(cursor.getColumnIndex("name"));
			String phone=cursor.getString(cursor.getColumnIndex("phone"));
			return new Person(personid, name, phone);
		}
		cursor.close();
		return null;
	}


}


SQLCipherOpenHelper如下:

package cc.testsqlcipher;

import android.content.Context;
import net.sqlcipher.database.SQLiteDatabase;
import net.sqlcipher.database.SQLiteOpenHelper;
/**
 * 注意:
 * 这里包的引用,均是在:
 * net.sqlcipher.database之下
 */
public class SQLCipherOpenHelper extends SQLiteOpenHelper {
    private final static String DATABASE_NAME="test.db";
	public SQLCipherOpenHelper(Context context) {
		super(context, DATABASE_NAME, null, 1);
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		db.execSQL("create table person(personid integer primary key autoincrement,name varchar(20),phone VARCHAR(12))");
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
	}

}


 

Person如下:

package cc.testsqlcipher;
public class Person {
	private Integer id;
	private String name;
	private String phone;
	
	public Person(String name, String phone) {
		this.name = name;
		this.phone = phone;
	}
	public Person(Integer id, String name, String phone) {
		this.id = id;
		this.name = name;
		this.phone = phone;
	}
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	@Override
	public String toString() {
		return "Person [id=" + id + ", name=" + name + ", phone=" + phone + "]";
	}
	
}


 

main.xml如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="使用SQLCipher对数据库进行加密" 
        android:layout_centerHorizontal="true"
    />
    
     <Button
        android:id="@+id/addButton"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="添加数据"
        android:layout_marginTop="100dip"
       />
     
      <Button
        android:id="@+id/queryButton"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="查找数据"
        android:layout_marginTop="200dip"
       />


</RelativeLayout>


 

相关文章
|
1月前
|
网络协议 关系型数据库 MySQL
如何实现无公网ip远程访问本地安卓Termux部署的MySQL数据库【内网穿透】
如何实现无公网ip远程访问本地安卓Termux部署的MySQL数据库【内网穿透】
|
3月前
|
存储 数据库连接 数据库
Android数据存储:解释SQLite数据库在Android中的使用。
Android数据存储:解释SQLite数据库在Android中的使用。
42 0
|
1月前
|
存储 SQL 数据库
【Android 从入门到出门】第六章:使用Room数据库并测试
【Android 从入门到出门】第六章:使用Room数据库并测试
29 4
|
1月前
|
网络协议 关系型数据库 MySQL
安卓手机termux上安装MariaDB数据库并实现公网环境下的远程连接
安卓手机termux上安装MariaDB数据库并实现公网环境下的远程连接
|
2月前
|
数据库 Android开发 数据库管理
【Android】使用android studio查看内置数据库信息
【Android】使用android studio查看内置数据库信息
76 0
|
3月前
|
存储 JSON 安全
使用shiro对数据库中的密码进行加密存储(java+springboot+shiro)
使用shiro对数据库中的密码进行加密存储(java+springboot+shiro)
92 0
|
3月前
|
关系型数据库 分布式数据库 数据库
如何为PolarDB数据库设置透明数据加密(TDE)
如何为PolarDB数据库设置透明数据加密(TDE) 透明数据加密(TDE,Transparent Data Encryption)是PolarDB数据库提供的一种实时I/O加密和解密功能,数据在写入磁盘之前进行加密,从磁盘读入内存时进行解密,而不会增加数据文件的大小。开发人员无需更改任何应用程序,即可使用TDE功能。
57 3
|
3月前
|
安全 Java 数据安全/隐私保护
Android和iOS应用程序加固方法详解:混淆、加壳、数据加密、动态加载和数字签名实现
Android和iOS应用程序加固方法详解:混淆、加壳、数据加密、动态加载和数字签名实现
74 0
|
3月前
|
关系型数据库 网络安全 分布式数据库
如何为PolarDB数据库设置SSL加密以提高链路安全性
如何为PolarDB数据库设置SSL加密以提高链路安全性 为了保障网络安全,提高链路安全性,您可以为PolarDB数据库启用SSL(Secure Sockets Layer)加密,并安装SSL CA证书到相关的应用服务。SSL在传输层对网络连接进行加密,能提升通信数据的安全性和完整性,但可能会增加网络连接响应时间。
57 2
|
3月前
|
SQL 存储 数据库
Android数据库框架该如何选?
Android数据库框架该如何选?
67 0