새소식

Android/[Android] ETC

[Android] Room : openHelperFactory & 암호화 DB

  • -

openHelperFactory는 Android에서 데이터베이스를 관리하기 위한 SQLiteOpenHelper 인스턴스를 생성하는 데 사용됩니다.

주로 Room 데이터베이스 라이브러리와 함께 사용됩니다.

Room은 SQLite 데이터베이스의 추상화 계층으로, 더 쉽고 안전하게 데이터베이스 작업을 수행할 수 있도록 도와줍니다.

 

openHelperFactory의 주요 역할은 데이터베이스를 여는 데 필요한 SQLiteOpenHelper를 제공하는 것입니다.

SQLiteOpenHelper는 데이터베이스 생성 및 업그레이드와 같은 작업을 처리합니다. Room 라이브러리에서 openHelperFactory는 데이터베이스 빌더에 전달되어 사용자 정의 SQLiteOpenHelper를 사용할 수 있도록 합니다.

 

 

SQLCipher 라이브러리 & 데이터베이스 암호화

encrypty_key는 SQLCipher가 데이터베이스를 암호화하고 복호화하는 데 사용하는 비밀번호(패스프레이즈) 역할을 합니다. SQLCipher는 이 패스프레이즈를 사용하여 암호화 및 복호화 작업을 수행하는 AES-256 암호화 알고리즘을 제공합니다.

다시 말해, encrypty_key는 데이터를 보호하기 위해 사용되는 비밀 키이고, 실제 암호화 및 복호화 알고리즘은 SQLCipher 라이브러리에 의해 처리됩니다. 이를 통해 데이터베이스의 보안을 강화할 수 있습니다.

 

dependencies {
    // SQLCipher dependency
    implementation 'net.zetetic:android-database-sqlcipher:4.5.0'
    implementation "androidx.sqlite:sqlite:2.1.0"
    implementation "androidx.sqlite:sqlite-framework:2.1.0"
}
// Room 데이터베이스 정의
@Database(entities = [YourEntity::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun yourDao(): YourDao
}

// 데이터베이스 암호화 설정 openHelperFactory()
fun getEncryptedDatabase(context: Context): AppDatabase {
    val factory = SupportFactory(ENCRYPT_KEY.toByteArray())

    return Room.databaseBuilder(
        context,
        AppDatabase::class.java,
        "encrypted_database"
    ).openHelperFactory(factory)
     .build()
}

SupportFactory에 패스프레이즈를 전달하여 데이터베이스를 설정합니다. 패스프레이즈는 ByteArray로 변환하여 사용합니다.

 

 

SQLCipher의 역할

  1. 패스프레이즈 사용:
    encrypty_key는 데이터베이스 파일의 암호화와 복호화에 사용됩니다. 이는 데이터베이스가 열릴 때 필요한 비밀 키로, 데이터베이스 파일을 안전하게 보호합니다.
  2. AES-256 암호화:
    SQLCipher는 AES-256 암호화 알고리즘을 사용하여 데이터베이스 파일을 암호화합니다. 이는 매우 강력한 암호화 알고리즘으로, 데이터를 안전하게 보호합니다.
  3. 통합:
    SQLCipher는 SQLite 데이터베이스와 호환되므로, 기존의 SQLite API를 사용하는 방식 그대로 암호화된 데이터베이스를 사용할 수 있습니다. Room과의 통합도 간단하며, SupportFactory를 통해 쉽게 설정할 수 있습니다.

따라서, encrypty_key는 SQLCipher가 제공하는 강력한 암호화 알고리즘을 사용하는데 필요한 비밀번호로, 데이터베이스의 암호화 및 복호화에 중요한 역할을 합니다.

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.