在用户默认值中保存包含编码为数据的敏感数据的对象

Posted

技术标签:

【中文标题】在用户默认值中保存包含编码为数据的敏感数据的对象【英文标题】:Saving object containing sensitive data encoded as Data in user defaults 【发布时间】:2021-06-10 14:49:05 【问题描述】:

我有一个对象包含敏感数据,如密码和密码,它在用户默认值中保存为数据。

将对象保存为用户默认的数据是一个安全的决定,还是将用户对象保存在钥匙串中更好?

【问题讨论】:

使用钥匙串 【参考方案1】:

所有敏感信息都必须保留在 Keychain 中,任何尝试调试您的应用的人都可以轻松访问 UserDefaults。

有一些框架可以帮助您使用 Keychain,例如 KeychainAccess。

使用上面给出的框架,您可以使用 Codable 模型保存编码信息。

let keychain = Keychain(service: "Service")
        
if let value = newValue, let data = try? JSONEncoder().encode(value) 
    try? keychain.set(data, key: "Key")

并检索:

let keychain = Keychain(service: "Service")
        
if let data = try? keychain.getData("Key") 
    return try? JSONDecoder().decode(Model.self, from: data)

【讨论】:

以上是关于在用户默认值中保存包含编码为数据的敏感数据的对象的主要内容,如果未能解决你的问题,请参考以下文章

当来自模型时如何将数据保存在用户默认值中

用户默认不保存,不检索数据

在应用加载时保存为用户默认值

将 NSRect 保存到 NSUserDefaults

通过 INDEX 更新和删除 userDefaults 中的对象

多个用户访问相同的用户默认数据 Swift