0
0

a-5-1-7.Realm DBの暗号化と暗号化キーの作成

Last updated at Posted at 2024-06-07

a-5-1-7.Realm DBの暗号化と暗号化キーの作成

目標設定

一覧に戻る

Github

テスト実装

RealmTestService.kt
package com.example.androidtest

import android.text.TextUtils.concat
import android.util.Base64
import android.util.Log
import io.realm.kotlin.Realm
import io.realm.kotlin.RealmConfiguration
import io.realm.kotlin.ext.realmListOf
import io.realm.kotlin.types.EmbeddedRealmObject
import io.realm.kotlin.types.RealmList
import io.realm.kotlin.types.RealmObject
import io.realm.kotlin.types.annotations.PrimaryKey
import java.lang.Exception
import java.util.Arrays

class Dog: RealmObject {
    @PrimaryKey
    var dogId: Int? = null
    var name: String = ""
    var age: Int = 0
}

class Person: RealmObject {
    @PrimaryKey
    var personId: Int? = null
    var name: String = ""
    var age: Int = 0
    var tasks: RealmList<Task> = realmListOf()
}

class Task: EmbeddedRealmObject {
    var taskId: Int? = null
    var name: String = ""
    var finished: Boolean = false
}

object RealmTestService {
    private var localRealm: Realm? = null

    val realm: Realm
        get() {
            if (localRealm != null) {
                return localRealm!!
            }

            // TODO: キーの保存先を安全な場所に保存し、存在する場合はそのキーを使用する
            // TODO: 暗号化の使用文字を元に戻す
            //val randomCharList = "ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz0123456789";
            val randomCharList = "A"
            val key64byte: String = (1..64)
                .map { randomCharList.random() }
                .joinToString("");

            try {
                val config = RealmConfiguration.Builder(
                    schema = setOf(Dog::class, Person::class, Task::class))
                    .encryptionKey(key64byte.toByteArray()) // 暗号化キー
                    .initialData {// DBの初期値
                        copyToRealm(Dog().apply {
                            dogId = 0
                            name = "いぬ"
                            age = 3
                        })
                        copyToRealm(Dog().apply {
                            dogId = 1
                            name = "うさぎ"
                            age = 2
                        })
                        copyToRealm(Dog().apply {
                            dogId = 2
                            name = "とり"
                            age = 2
                        })
                        copyToRealm(Person().apply {
                            personId = 0
                            name = "りょうたくん"
                            age = 20
                        })
                        copyToRealm(Person().apply {
                            personId = 1
                            name = "新たなりょうたくん"
                            age = 2
                            tasks = realmListOf(
                                Task().apply {
                                    taskId = 0
                                    name = "カレンダー作成"
                                    finished = false
                                },
                                Task().apply {
                                    taskId = 1
                                    name = "アプリ申請"
                                    finished = false
                                }
                            )
                        })
                    }.build()

                localRealm = Realm.open(config)
                Log.d("Realm情報", "開いたRealm ${localRealm!!.configuration.name}")
            } catch (e: Exception) {
                Log.d("Realm情報", "${e.message}")
            }

            return localRealm!!
        }
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0