2014-01-14 4 views
1

Я попытался использовать SQLCipher для шифрования/дешифрования моей базы данных. Кажется, это работает, но я хочу быть уверенным, что делаю это правильно. Вот мой код:Я правильно шифрую 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()); 
      } 
     } 

Является ли это на самом деле все, что нужно для шифрования/дешифрования базы данных? Я ничего не теряю?

+1

Почему бы вам просто не проверить, зашифрован ли файл DB? – m0skit0

+0

Хорошая идея :). Я пробовал с другим паролем, не получилось, так что это работа.Thx – Peter

ответ

2

Помимо сбора пароля от пользователя, а не его жесткого кодирования, это все, что вам нужно. SQLCipher для Android только постепенно отличается от использования обычного SQLite: просто позвоните loadLibs(), прежде чем использовать его, а затем ввести пароль для getReadableDatabase(), getWriteableDatabase() и т.д.

Со временем, вы можете иметь больше проблем, например, когда SQLCipher изменяет свою базу данных формате, и вам необходимо выполнить обновление, как это было необходимо от SQLCipher 2.x до 3.0.x. Но это редко.

Смежные вопросы