检查文件是否是带有SQLCipher加密的有效SQLite数据库

时间:2016-07-14 05:56:34

标签: sqlite encryption sqlcipher

有没有办法在不知道加密密钥的情况下验证文件是否是带有SQLCipher的有效SQLite数据库?换句话说,是否存在任何未加密的校验和或魔术字?

this post我理解正常的SQLite 3数据库只是以字符串" sqlite 3"开头,如果我知道密码,我可以检查实际高级数据库结构的有效性{{ 3}}

错误消息“文件已加密或不是数据库”using this 表示答案为否 - 但有人可以确认吗?

2 个答案:

答案 0 :(得分:2)

没有。 加密的数据库文件与包含随机数据的文件无法区分。

答案 1 :(得分:0)

我通过DBHelper的构造函数中的这段代码来解决(这不是完全干净的方法,但是它可以工作...)

private DBHelper() {
    SQLiteDatabase.loadLibs(context);

    File dbFile = context.getDatabasePath(DB_NAME);

    try {
        if (dbFile.exists()) { // is db file exists?
            // check if db file can be opened
            SQLiteDatabase.openDatabase(dbFile.getAbsolutePath(), DB_PASSWORD, null, SQLiteDatabase.OPEN_READWRITE).close();
        }
    } catch (SQLiteException ex) { // it's impossible open db file - we must encrypt it
        encryptDatabase(context, dbFile);
    }
}