Зашифровать NSDocument на macOS
Есть ли в любом случае можно переопределить NSPersistentDocument для шифрования и требуется пароль для открытия файла? Другими словами, возможно ли зашифровать документ целиком с помощью предоставленного пользователем пароля? Я рассмотрел решения, и кажется, что единственный способ - это фактически зашифровать сами данные CoreData, однако это сделает невозможным использование NSPredicate для фильтрации NSFetchRequest, поскольку данные будут зашифрованы. Альтернативой может быть использование Realm, у которого есть ключ шифрования, но который только шифрует данные Realm, оставляя все остальные данные в документе незашифрованными.
2 ответа
Вы можете зашифровать объекты CoreData, и создавая временные (только в памяти) поля открытого текста при чтении, вы можете использовать NSPredicate для фильтрации NSFetchRequest по этим полям открытого текста. Смотрите здесь для примера кода шифрования / дешифрования: https://github.com/michaelrourke/EncryptedCoreData
Посмотрите на документ для NSPersistentStore
и его два абстрактных подкласса, NSAtomicStore
а также NSIncrementalStore
, Если вы сделаете пользовательский подкласс одного из них, вы можете настроить серверную часть, в которую записываются базовые данные.