android - 我是否使用 SQLCipher 正确加密?

标签 android sqlcipher

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

 public class MainActivity extends Activity {

    私有(private)数据库类别 dbc;
    @覆盖
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
           //this.deleteDatabase("类别");
            dbc = new DataBaseCate gory(this);
            尝试 {
                   dbc.openToWriting();
                   dbc.createCategory("测试4");
                   数据库关闭();
            }
            捕获(可抛出的前){
              Log.e("ABC","abc",ex);
            }
            dbc.openToReading();
            列表<类别> list = dbc.getAllCategories();
            System.out.println("大小:"+list.size());
            数据库关闭();
}

 公共(public)类 DataBaseCategory {

    私有(private) SQLiteDatabase 数据库;
    私有(private)上下文上下文;
    私有(private) DataBaseCategoryHelper dbCHelper;
    私有(private)字符串密码=“密码”;
    私有(private)字符串 [] allColumns = { DataBaseCategoryHelper.COLUMN_ID,
        DataBaseCategoryHelper.COLUMN_CATEGORY_NAME };
    公共(public) DataBaseCategory(上下文上下文){
            this.context = 上下文;
            SQLiteDatabase.loadLibs(上下文);
            dbCHelper = new DataBaseCategoryHelper(this.context);
    }
    public void openToWriting() 抛出 SQLException{
             database = dbCHelper.getWritableDatabase(密码);

    }
    public void openToReading() 抛出 SQLException {
             database = dbCHelper.getReadableDatabase(密码);
    }
    公共(public)无效关闭(){
             dbCHelper.close();
    }
   /**
      * 不是代码的重要部分
      */
 }
 公共(public)类 DataBaseCategoryHelper 扩展 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 = "创建表"
                  + TABLE_COMMENTS + "("+ COLUMN_ID
                  + "整数主键自增,"+ COLUMN_CATEGORY_NAME
                  + "文本不为空);";
      公共(public) DataBaseCategoryHelper(上下文上下文){
              super (上下文,数据库名称,空,数据库版本);
      }
      @覆盖
      public void onCreate(SQLiteDatabase 数据库){
          尝试 {
              database.execSQL(DATABASE_CREATE);

          }
           catch (异常前){
             Log.e("ErroeDBC",ex.toString());
          }
      }

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

最佳答案

除了从用户那里收集密码而不是硬编码之外,这就是您所需要的。适用于 Android 的 SQLCipher 与使用普通 SQLite 的区别仅在于增量:只需在使用前调用 loadLibs(),然后将密码提供给 getReadableDatabase()getWriteableDatabase()

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

关于android - 我是否使用 SQLCipher 正确加密?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21124002/

相关文章:

java - 将 View 平移到屏幕边界之外并将其动画回来

android - 如何存储用于 Android 的 SQLCipher 中的 key

ios - iOS中使用SqlCipher存储数据时可以使用CoreData来管理离线数据吗

android - SQLcipher(不同版本)在一个平台上工作,但在另一个平台上崩溃

android - 如何防止Android App突然崩溃

java - 带有字符串的 switch 语句中需要常量表达式错误

android - 如何确保使用 saveEventually() 保存 ParseObject 和 ParseRelation

android - AttributeSet 值返回 @2131296269 - 它是什么以及如何使用?

java - 如何在SQLite数据库中使用加密

android - 将 SQLCipher 与 greenDAO 集成