69864


[Encryption/ViewController.swift](https://github.com/realm/realm-
cocoa/blob/master/examples/ios/swift/Encryption/ViewController.swift)に暗号化の設定方法が２つ記載されていますが、何か違いはあるのでしょうか？

[code]

    // getkeyで設定
    let configuration = Realm.Configuration(encryptionKey: getKey() as Data)
    
    // 直接設定
    let configuration = Realm.Configuration(encryptionKey: "1234567890123456789012345678901234567890123456789012345678901234".data(using: String.Encoding.utf8, allowLossyConversion: false))
    
[/code]

また、getkeyで設定している場合、Realm Studio で閲覧することができませんでした。  
特に違いがないようであれば、直接設定で暗号化したいと思うのですが何か問題はありますか？


CC BY-SA 4.0
2020-08-25T01:14:00.810
69844
2020-08-25T11:18:14.657
2020-08-25T01:45:35.117
3060
41014
question
realm
Realmデータベースの暗号化を指定する場合にどちらを使えば良いかわかりません。


暗号化キーは64バイトのバイト列であればなんでもいいのでどちらのやり方でも問題ありません。

ただ、

> getkeyで設定している場合、Realm Studio で閲覧することができませんでした。

ということから、おそらく`getKey()`メソッドの処理を勘違いされています。

`getKey()`メソッドはまず最初にKeychainに保存されている暗号化キーを検索して、すでに保存されたキーがあればそれを使ってRealmを復号します。

保存されたキーがなければ（＝最初にRealmファイルを作成するとき）新しく **ランダムな**
暗号化キーを生成して、Keychainに保存した上で戻り値として返します。

おそらくKeychainに保存する際の検索キーとしての文字列

[code]

    let keychainIdentifier = "io.Realm.EncryptionExampleKey"
    
[/code]

^ この部分を暗号化キーと勘違いされたのかと存じます。  
これはKeychainの検索キーにすぎなくて、`getKey()`メソッドが生成する実際の暗号化キーは毎回変わるランダムなバイト列です。

このサンプルコードはおそらくそのままコードをコピーして使っても大きな問題が起こらないように実際のユースケースに即して作られています。

つまり、データを復号できるのはユーザー本人だけ、アプリの開発元はそもそも暗号化キーがわからないので（Keychainに保存されているものを確認しない限り）開発元もデータを確認できないということを前提に作られています。


CC BY-SA 4.0
2020-08-25T11:18:14.657
69864
2020-08-25T11:18:14.657
5519
69844
answer