zoukankan      html  css  js  c++  java
  • 数据库开源框架之sqlcipher加密数据库


    访问github链接:https://github.com/sqlcipher/android-database-sqlcipher


    访问 http://sqlcipher.net/sqlcipher-for-android/ 查看官方介绍, 并从官方介绍中找出编译成功之后的zip压缩包进行下载
    https://s3.amazonaws.com/sqlcipher/SQLCipher+for+Android+v3.1.0.zip


    普通数据库

    public interface MyDB {
    
        String name = "my.db";
        int version = 1;
    
        public interface MyTable {
            String name = "test";
            String column_id = "_id";
            String column_name = "name";
            String create_sql = "create table " + name + "(" + column_id
                    + " integer primary key autoincrement, " + column_name
                    + " text)";
        }
    }

    public class NativeOpenHelper extends SQLiteOpenHelper {
    
        public NativeOpenHelper(Context ctx) {
            super(ctx, MyDB.name, null, MyDB.version);
        }
    
        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(MyTable.create_sql);
        }
    
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    
        }
    }

    public class NativeDao {
    
        private NativeOpenHelper mHelper;
    
        public NativeDao(Context ctx) {
            mHelper = new NativeOpenHelper(ctx);
        }
    
        public void add(String name) {
            SQLiteDatabase database = mHelper.getWritableDatabase();
            ContentValues values = new ContentValues();
            values.put(MyTable.column_name, name);
            database.insert(MyTable.name, null, values);
            database.close();
        }
    }
    

     经过加密的数据库

    public interface SafeDB {
    
        String name = "safe.db";
        int version = 1;
    
        public interface SafeTable {
            String name = "test";
            String column_id = "_id";
            String column_name = "name";
            String create_sql = "create table " + name + "(" + column_id
                    + " integer primary key autoincrement, " + column_name
                    + " text)";
        }
    
    }

    public class SafeDao {
    
        private SafeOpenHelper mHelper;
    
        public SafeDao(Context ctx) {
            mHelper = new SafeOpenHelper(ctx);
        }
    
        public void add(String name) {
            SQLiteDatabase database = mHelper.getWritableDatabase("123456");
            ContentValues values = new ContentValues();
            values.put(SafeTable.column_name, name);
            database.insert(SafeTable.name, null, values);
            database.close();
        }
    
        public void query() {
            SQLiteDatabase database = mHelper.getWritableDatabase("123456");
            Cursor cursor = database.query(SafeTable.name,
                    new String[] { SafeTable.column_name }, null, null, null, null, null);
    
            if (cursor != null) {
                while (cursor.moveToNext()) {
                    String name = cursor.getString(0);
                    System.out.println(name);
                }
    
                cursor.close();
            }
    
            database.close();
        }
    }

    import android.content.Context;
    import com.loaderman.sqlitedemo.SafeDB.SafeTable;
    
    public class SafeDBHelper extends net.sqlcipher.database.SQLiteOpenHelper {
    
        public SafeDBHelper(Context ctx) {
            super(ctx, SafeDB.name, null, SafeDB.version);
        }
    
        @Override
        public void onCreate(net.sqlcipher.database.SQLiteDatabase db) {
            db.execSQL(SafeTable.create_sql);
        }
    
        @Override
        public void onUpgrade(net.sqlcipher.database.SQLiteDatabase arg0, int arg1,
                              int arg2) {
    
        }
    
    }

    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            //加载本地库
            SQLiteDatabase.loadLibs(this);
        }
    
        public void normalDB(View view) {
            NativeDao dao = new NativeDao(this);
            dao.add("hahahhaha");
        }
    
        public void safeDB(View view) {
            SafeDao dao = new SafeDao(this);
            dao.add("hehehheheheh");
            dao.query();
        }
    } 
    

    发现导出来的数据库文件,一个看到数据,一个看不到数据

  • 相关阅读:
    java四种线程池的使用
    @Autowired@Resource@Qualifier的区别
    Unsupported major.minor version 52.0解决办法
    CentOS7配置防火墙
    redis 集群搭建
    excludepathpatterns 无效
    解决 SpringBoot 没有主清单属性
    Java Web应用中调优线程池的重要性
    spring boot application properties配置详解
    Class path contains multiple SLF4J bindings.
  • 原文地址:https://www.cnblogs.com/loaderman/p/6449789.html
Copyright © 2011-2022 走看看