net.sqlcipher.database.SQLiteException:文件已加密或不是数据库

时间:2015-07-28 14:54:45

标签: android mysql database encryption

我正在使用 SqlCipher 来加密数据库。为了测试我的approch,我使用了两个步骤:

  1. 使用密钥(ofcourse !!!)创建一个DB(在SqlCipher中),通过检查

    打开它

    net.sqlcipher.database.SQLiteDatabase database = net.sqlcipher.database.SQLiteDatabase. openOrCreateDatabase(databaseFile, dataBasePassword, null); if(database.isOpen());

  2. 而不是关闭database

    1. 再次使用代码打开数据库: net.sqlcipher.database.SQLiteDatabase database = net.sqlcipher.database.SQLiteDatabase. openOrCreateDatabase(databaseFile, password, null); if(database.isOpen())
    2. 问题:

      密码1:2DD29CA851E7B56E4697B0E1F08507293D761A05CE4D1B628663F411A8086D99 密码2:foo123

      当我尝试执行第2步(打开数据库)时,我收到错误

        

      net.sqlcipher.database.SQLiteException:文件已加密或不是   数据库

      我知道这个问题已被提出,但没有任何有利的答案。所以任何帮助请!!!!

1 个答案:

答案 0 :(得分:0)

而不是使用:

  net.sqlcipher.database.SQLiteDatabase database = net.sqlcipher.database.SQLiteDatabase.
                openOrCreateDatabase(databaseFile, dataBasePassword, null,hook);

` 使用:

SQLiteDatabaseHook hook = new SQLiteDatabaseHook(){
              public void preKey(SQLiteDatabase database){
                database.rawExecSQL("PRAGMA kdf_iter = 4000");
              }
              public void postKey(SQLiteDatabase database){}
            };
        net.sqlcipher.database.SQLiteDatabase database = net.sqlcipher.database.SQLiteDatabase.
                openOrCreateDatabase(databaseFile, dataBasePassword, null,hook);

像魅力一样工作