【问题标题】:Am I encrypting correctly with SQLCipher?我是否使用 SQLCipher 正确加密?
【发布时间】:2014-01-14 21:04:12
【问题描述】:

我尝试使用 SQLCipher 加密/解密我的数据库。它似乎有效,但我想确定我做对了。 这是我的代码:

 public class MainActivity extends Activity { 

    private DataBaseCategory dbc;
    @Override
    protected void onCreate(Bundle savedInstanceState) { 
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);   
            //this.deleteDatabase("category");
            dbc = new DataBaseCate gory(this); 
            try {
                   dbc.openToWriting(); 
                   dbc.createCategory("TEST4");  
                   dbc.close(); 
            } 
            catch(Throwable ex) { 
              Log.e("ABC","abc",ex);
            }
            dbc.openToReading(); 
            List<Category> list =  dbc.getAllCategories(); 
            System.out.println("Size : "+list.size()); 
            dbc.close();    
}

 public class DataBaseCategory {

    private SQLiteDatabase database; 
    private Context context;
    private DataBaseCategoryHelper dbCHelper;  
    private String password = "password";
    private String[] allColumns = { DataBaseCategoryHelper.COLUMN_ID,
        DataBaseCategoryHelper.COLUMN_CATEGORY_NAME };
    public DataBaseCategory(Context context) { 
            this.context = context; 
            SQLiteDatabase.loadLibs(context);  
            dbCHelper = new DataBaseCategoryHelper(this.context);
    }   
    public void openToWriting() throws SQLException{   
             database = dbCHelper.getWritableDatabase(password);  

    }    
    public void openToReading() throws SQLException { 
             database = dbCHelper.getReadableDatabase(password);
    } 
    public void close() {
             dbCHelper.close();
    }  
    /** 
      * Not important part of code 
      */  
 }
 public class DataBaseCategoryHelper extends SQLiteOpenHelper{ 

            public static final String TABLE_COMMENTS = "category";
            public static final String COLUMN_ID = "id";
            public static final String COLUMN_CATEGORY_NAME = "category_name"; 
            private static final String DATABASE_NAME = "category";
            private static final int DATABASE_VERSION = 1;
            private static final String DATABASE_CREATE = "create table "
                  + TABLE_COMMENTS + "(" + COLUMN_ID
                  + " integer primary key autoincrement, " + COLUMN_CATEGORY_NAME
                  + " text not null);";
      public DataBaseCategoryHelper(Context context) {
             super(context, DATABASE_NAME, null, DATABASE_VERSION);
      } 
      @Override
      public void onCreate(SQLiteDatabase database) {  
          try { 
              database.execSQL(DATABASE_CREATE);  

          } 
          catch(Exception ex ) { 
             Log.e("ErroeDBC ",ex.toString());
          }
      }

这真的是我加密/解密数据库所需的全部内容吗? 我错过了什么吗?

【问题讨论】:

  • 你为什么不检查一下数据库文件是否被加密?
  • 好主意:)。我尝试了另一个密码,失败了,所以它的工作。Thx

标签: android sqlcipher


【解决方案1】:

除了从用户那里收集密码,而不是硬编码,这就是你所需要的。 Android 的 SQLCipher 与使用普通 SQLite 只是在增量上有所不同:使用前只需调用 loadLibs(),然后将密码提供给 getReadableDatabase()getWriteableDatabase() 等。

随着时间的推移,您可能会遇到更多问题,例如当 SQLCipher 更改其数据库格式并且您需要执行升级时,正如从 SQLCipher 2.x 到 3.0.x 所需要的那样。但这些并不常见。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-10
    • 1970-01-01
    • 1970-01-01
    • 2016-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多