菜鸟教程小白 发表于 2022-12-12 22:46:41

ios - 在后台或通知进程中使用加密 Realm ?


                                            <p><p>Realm 有一个很棒的 <a href="https://realm.io/docs/swift/latest/#encryption" rel="noreferrer noopener nofollow">write up</a>和 <a href="https://github.com/realm/realm-cocoa/blob/master/examples/ios/swift-2.2/Encryption/ViewController.swift" rel="noreferrer noopener nofollow">sample code</a>用于加密您的数据库。本文档和示例按预期工作,直到您尝试在以下情况下解密 Realm :</p>

<ol>
<li>用户的手机上有密码</li>
<li>设备已锁定</li>
<li>当收到远程通知时,您的应用正在尝试与 Realm 一起工作</li>
</ol>

<p>发生这种情况是因为我们无法访问钥匙串(keychain)来获取(或创建)用于加密/解密 Realm 的 key 。默认的 <code>kSecAttrAccessible</code> 值为 <code>kSecAttrAccessibleWhenUnlocked</code></p>

<p>在我看来,有几个选项:</p>

<ol>
<li>将 <code>kSecAttrAccessible</code> 更改为 <code>kSecAttrAccessibleAlways</code>。我不喜欢这个,因为它 a) 太开放 b) 它是 <a href="https://stackoverflow.com/questions/32112678/ksecattraccessiblealways-deprecated-in-ios-9#comment53491023_32600761" rel="noreferrer noopener nofollow">slated to be deprecated</a>在 iOS 9 中</li>
<li>将 <code>kSecAttrAccessible</code> 更改为 <code>kSecAttrAccessibleAfterFirstUnlock</code> 或 <code>kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly</code>。这更好,但对我来说仍然感觉太开放了,即使 <a href="https://developer.apple.com/reference/security/ksecattraccessibleafterfirstunlockthisdeviceonly" rel="noreferrer noopener nofollow">docs</a> state:推荐用于需要后台应用访问的项目</li>
<li>创建第二个非加密 Realm 以用作临时数据库。在此处存储通知数据,然后当应用程序从用户交互中唤醒(设备将被解锁)时,将数据从暂存 Realm 移动到加密的真实 Realm 。这也感觉不对,因为我们的数据暂时未加密</li>
<li>结合 2 和 3 对 staging Realm 进行加密,并使用 <code>kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly</code></li> 保护它的 key
<li>??</li>
</ol>

<p>我目前正在尝试确定 #2、#3 是否值得投入时间,或者我是否可以提出 #5</p>

<p>这里有没有我明显应该使用的方法或我错过的方法?</p>

<p>谢谢</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我是 <a href="https://github.com/kishikawakatsumi/KeychainAccess" rel="noreferrer noopener nofollow">KeychainAccess</a> 的作者图书馆。我强烈建议您使用 <code>kSecAttrAccessibleAfterFirstUnlock</code> (第二个选项)。这是从后台访问钥匙串(keychain)项目的最佳方式。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 在后台或通知进程中使用加密 Realm ?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/40332246/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/40332246/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 在后台或通知进程中使用加密 Realm ?