Room을 암호화해보세요

경위



여기 에도 있습니다만, 개인정보를 취급하는 경우, 데이타베이스의 암호화가 필요할 것 같았기 때문에, Room은 암호화할 수 있는지 조사했는데 SQLCipher라는 라이브러리가 눈에 띄었습니다.

참고



Android에 SQLCipher를 도입해 봅니다.
Protect your Room database with SQLCipher on Android | by ...

SQLCipher 라이브러리 도입



여기 을 참고로 build.gradle(app) 에 추가합니다.

build.gradle(app)

dependencies {

    implementation "net.zetetic:android-database-sqlcipher:4.4.2"
    implementation "androidx.sqlite:sqlite:2.1.0"
}


데이터베이스를 조작하는 부분

UserDatabase.kt

package com.example.sample

import android.content.Context
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
import net.sqlcipher.database.SQLiteDatabase
import net.sqlcipher.database.SupportFactory

@Database(entities = [User::class], version = 2, exportSchema = false )
abstract class UserDatabase : RoomDatabase() {
    abstract fun userDao(): UserDao

    companion object{
        fun buildDatabase(context: Context): UserDatabase{
            return Room.databaseBuilder(
                    context,
                    UserDatabase::class.java,
                    "user.db"
            ).openHelperFactory(SupportFactory(SQLiteDatabase.getBytes("test123".toCharArray())))
                    .allowMainThreadQueries()
                    .build()
        }
    }
}



빌드할 때 DB 파일의 위치



공식 문서 에 있는 대로,
DeviceFileExplorer에서/data/data/app_name/databases에 DB 파일을 만듭니다.
(내 경우에는/data/data/com.example.rworksample00026/databases였습니다)
생성된 파일을 바탕화면으로 다운로드합니다.









데이터베이스 내용 확인



DB Browser for sqlite 에서 SQLcipher측을 기동해 패스워드를 입력하면 내용을 확인할 수 있습니다. (내용 데이터가 있으면 데이터도 확인할 수 있습니다.)





좋은 웹페이지 즐겨찾기