2
Realm有很好的加密数据库的write up和sample code。本文档和示例工作按计划,直到您尝试解密境界时:在后台或通知进程中使用加密领域?
- 用户都有自己的手机上输入密码
- 设备被锁定
- 您的应用程序正在试图做的工作与境界时远程通知进来
发生这种情况是因为我们无法访问钥匙串来获取(或创建)密钥以解密/解密Realm。默认kSecAttrAccessible
值为kSecAttrAccessibleWhenUnlocked
有几个选项,我看到他们:
- 变化
kSecAttrAccessible
到kSecAttrAccessibleAlways
。我不喜欢这个,因为它是a)太开放了,b)它在iOS 9中是slated to be deprecated - 更改
kSecAttrAccessible
到kSecAttrAccessibleAfterFirstUnlock
或kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly
。虽然docs状态为:这建议用于需要由后台应用程序访问的项目 - 创建第二个未加密的Realm以用作临时数据库,但这仍然让我感觉开放太多。将通知数据存储在此处,然后当应用程序从用户交互中唤醒(设备将被解锁)时,将数据从分段Realm移动到加密的Realm中。这也不舒服,因为我们暂时没有加密数据
- 组合2和3并加密分段Realm,并用
kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly
加密 - ??
我目前正试图如果#2来决定,如果#3是值得投入时间到,或者如果我能想出一个#5
是否有办法在这里,我应该清楚使用还是我错过了?
感谢
谢谢,通过kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly?我倾向于这一点,但后来意识到,当用户恢复他们的手机时(如果数据库被复制,但它的关键没有),它会变得非常快。 – timbroder
另外,真棒看图书馆 – timbroder
是'~ThisDeviceOnly'意味着项目永远不会迁移到新设备(=未备份)。如果您没有特殊原因,我建议使用'kSecAttrAccessibleAfterFirstUnlock'而不是'〜ThisDeviceOnly'。大多数用户希望从加密备份恢复密码。 –