【发布时间】:2019-05-26 00:30:43
【问题描述】:
我的应用存储了用户的敏感数据,我想知道保护数据的一般/正确/最安全的方法是什么。
我现在的方法是将编码数据保存到钥匙串中,更具体但更简单:
- 我正在使用 PropertyList 对数组中的自定义类型进行编码/解码
- 然后将这些传递给 Keychain。感谢 Kishikawa Katsumi,我正在使用一个名为 KeychainAccess 的包装器。
- 从 Keychain 中检索数据,然后将其解码以显示在 tableview 上。
以下是我的代码位:
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 加密数据然后将其传递给 Keychain 是否有意义?
我花了几个星期寻找详细的解决方案,但还没有运气。请帮助新开发者。
【问题讨论】:
标签: swift keychain property-list