我遇到了一个问题,我正在处理的一个应用程序已经使用SQLCipher为Room数据库启用了加密,但是实际的密码没有安全地形成。我有一种新的、安全的方法来建立和运行新的数据库,但是有一个问题:如何迁移现有的数据库以使用新的密码?
我已经设置了一个方法来检查数据库是否使用不安全的密码,如下所示:
if (DatabaseEncryptor.isUnsecure()) {
// Old, unsecure database in use; should migrate to a secure one
}
// All should be good now, set up the secure support factory
builder.openHelperFactory(DatabaseEncryptor.getSupportFactory(context))
.fallbackToDesctructiveMigration()
更改现有数据库的密码行吗?如果不是,如何将数据从旧的、不安全的数据库传输到新的、安全的数据库?
发布于 2022-06-30 12:34:31
发现重新输入数据库是相当直接的。下面是我最后使用的解决方案:
val dbFilePath = context.getDatabasePath(DATABASE_NAME)
if (dbFilePath.exists()) {
SQLiteDatabase.loadLibs(context)
val db = SQLiteDatabase.openDatabase(
dbFilePath.absolutePath,
OLD_PASSPHRASE,
null,
SQLiteDatabase.OPEN_READWRITE
)
if (db.isOpen) {
db.rawExecSQL("PRAGMA key = '${OLD_PASSPHRASE}'")
db.rawExecSQL("PRAGMA rekey = '${NEW_PASSPHRASE}'")
db.close()
}
}
https://stackoverflow.com/questions/72799527
复制相似问题