Android 使用 SQLCipher 更改加密 Room DB 的密码

Android Change password of encrypted Room DB with SQLCipher

我使用 SQLCipher 成功加密了我的 Room DB。

我现在喜欢让用户选择更改数据库密码。那么如何使用 Room DB 更改 SQLCipher 密码?

找到答案:

database.query("PRAGMA rekey = '$newPassword';", emptyArray())

作为带有上下文的完整代码示例:

    fun changePassword(previousPassword: String, newPassword: String) {
        val passphrase = SQLiteDatabase.getBytes(previousPassword.toCharArray())
        val factory = SupportFactory(passphrase)

        val database = Room.databaseBuilder(applicationContext, <your_database_class>::class.java, "<database_name>")
            .openHelperFactory(factory)
            .build()

        database.query("PRAGMA rekey = '$newPassword';", emptyArray())
    }

甚至不需要关闭和re-open数据库。