質問: Realm.Configuration(encryptionKey: "1234567890123456789012345678901234567890123456789012345678901234".data(using: String.Encoding.utf8, allowLossyConversion: false)) ``` また、getkeyで設定している場合、Realm Studio で閲覧することができませんでした。 特に違いがないようであれば、直接設定で暗号化したいと思うのですが何か問題はありますか?
回答: 暗号化キーは64バイトのバイト列であればなんでもいいのでどちらのやり方でも問題ありません。 ただ、 > > getkeyで設定している場合、Realm Studio で閲覧することができませんでした。 > > > ということから、おそらく`getKey()`メソッドの処理を勘違いされています。 `getKey()`メソッドはまず最初にKeychainに保存されている暗号化キーを検索して、すでに保存されたキーがあればそれを使ってRealmを復号します。 保存されたキーがなければ(=最初にRealmファイルを作成するとき)新しく **ランダムな** 暗号化キーを生成して、Keychainに保存した上で戻り値として返します。 おそらくKeychainに保存する際の検索キーとしての文字列 ``` let keychainIdentifier = "io.Realm.EncryptionExampleKey" ``` ^ この部分を暗号化キーと勘違いされたのかと存じます。 これはKeychainの検索キーにすぎなくて、`getKey()`メソッドが生成する実際の暗号化キーは毎回変わるランダムなバイト列です。 このサンプルコードはおそらくそのままコードをコピーして使っても大きな問題が起こらないように実際のユースケースに即して作られています。 つまり、データを復号できるのはユーザー本人だけ、アプリの開発元はそもそも暗号化キーがわからないので(Keychainに保存されているものを確認しない限り)開発元もデータを確認できないということを前提に作られています。