Мое приложение хранит конфиденциальные данные пользователя, и мне интересно, что является общим / правильным / наиболее безопасным способом защиты данных.
Мой подход теперь заключается в сохранении закодированных данных в связку ключей, более конкретно, но просто:
- Я кодирую / декодирую пользовательские типы в массиве с помощью PropertyList
- Тогда передайте это Брелку. Я использую обертку под названием KeychainAccess благодаря Kishikawa Katsumi.
- Получить данные из цепочки для ключей, а затем декодировать их для отображения в виде таблицы.
Ниже приведены мои биты кода:
extension UserInformation {
static let propertyListEncoder = PropertyListEncoder()
static let propertyListDecoder = PropertyListDecoder()
static let keychain = Keychain(service: "com.xxxxx.DataSaving-App")
static func saveToKeychain(userInfo: [UserInformation]) {
let data = try? propertyListEncoder.encode(userInfo)
if let savingData = data {
dump(userInfo)
keychain[data: "encodedUserInfo"] = NSData(data: savingData) as Data
}
}
static func loadFromKeychain() -> [UserInformation]? {
guard let retrievedData = keychain[data: "encodedUserInfo"] else {
return nil }
let data = try? propertyListDecoder.decode(Array<UserInformation>.self, from: retrievedData)
return data
}
}
Выше работает нормально и проблем пока не обнаружено. Тем не менее, я не уверен, что использовать PropertyListEncoder является правильным способом кодирования / декодирования. Пожалуйста, смотрите ниже указанные вопросы, и дайте мне совет, будьте очень благодарны.
- Будет ли вышеуказанный подход достаточно безопасным?
- Является ли PropertyListEncoder / Decoder просто выполняет КОДИРОВАНИЕ / ДЕКОДИРОВАНИЕ, НЕ СОХРАНЯЯ ДАННЫЕ ДЛЯ ЛЮБОГО, как plist или любое хранилище, где уязвимы?
- Если требуется какая-либо другая мера, имеет ли смысл шифровать данные с помощью Common Swift и передавать их в связку ключей?
Я потратил несколько недель, чтобы найти детальное решение, но пока не повезло. Пожалуйста, помогите новому разработчику.