8种机械键盘轴体对比
本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?
在移动设备上,不管是iOS还是Android,一般都使用SQLite存储数据。SQLite是轻量级、跨平台、开源的数据库,是移动设备最优的数据库方案。但是使用免费版的SQLite是使用明文存储数据的,毫无疑问会带来数据安全性的问题。在Android中,进程生成的数据库文档存储在/data/data//database里,取得root权限的手机可以进入这一目录,可以使用文本编辑器查看数据库文档,使得信息暴露无遗。因此,对于进程中会涉及到敏感信息的app来说,必须解决数据库加密的问题。
实现SQLite加密的几种方式SEE
官方实现版本,收费。其实SQLite在设计过程中就已经考虑了安全问题并预留了相关接口,不过在免费版中没有给出,在收费版本中实现了。
wxSQlite
免费,须自己编译。
SQLCipher
开源,分收费版和免费版,区别只是收费版集成更方便,编译速度更快。本文主要介绍此方法。
在项目中集成SQLCipher
首先下载Android版本的SQLCipher工具包,解压,将assets和libs里的armeabi及sqlcipher.jar放到工程目录的对应位置。这样就把相应的sqlcipher工具集成到项目里了。
在进程里只需要做两件事情。
一是创建一个MyDatabaseHelper继承自net.sqlcipher.database.SQLiteOpenHelper,除了引入的包不同之外,其他用法跟
android.database.sqlite.SQLiteOpenHelper是一样的。package com.jason.sqlciphertest;
import android.content.Context;
import net.sqlcipher.database.SQLiteDatabase;
import net.sqlcipher.database.SQLiteDatabase.CursorFactory;
import net.sqlcipher.database.SQLiteOpenHelper;
public class extends{
public static final String CREATE_TABLE = "create table Student(name text, age integer)";
public MyDatabaseHelper(Context context, String name, CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
}
}二是在需要用到数据库的地方,使用以下代码对数据库文档的加密:
private static final String key = “secret_key”;
db = dbHelper.getWritableDatabase(key);
经过这两个步骤,数据库文档已经是加密的了。进入/data/data//database目录,尝试打开数据库文档,可以看到有个错误提示,提示信息是文档已加密或者不是数据库文档。