据我所知,使用'NSSecureCoding‘可以安全地将数据存储到磁盘上,类似于将密钥链作为安全存储信息的地方。
我也知道keychain的优点是可以在同一个提供者的应用程序之间共享。如果忽略密钥链共享特性,是否可以说,与NSSecureCoding相比,在密钥链中存储数据同样安全?
class User: NSObject, NSSecureCoding {
private enum CodingKeys: String, CodingKey {
case test
}
public static var supportsSecureCoding: Bool {
return true
}
override init() {}
var test: String = "teeees"
func encode(with aCoder: NSCoder) {
aCoder.encode(self.test as NSString)
}
required init?(coder aDecoder: NSCoder) {
test = aDecoder.decodeObject(of: NSString.self, forKey: CodingKeys.test.rawValue)! as String
}
}我把它归档
let user = User()
let data = NSKeyedArchiver.archivedData(withRootObject: user)
try! data.write(to: DocumentHelper.cashURLForID(id: "TTYYUU"))TTYYUU的内容是:
6270 6c69 7374 3030 d401 0203 0405 0615 1658 2476 6572 7369 6f6e 5824 6f62 6a65 6374 7359 2461 7263 6869 7665 7254 2474 6f70 1200 0186 a0a4 0708 0d0e 5524 6e75 6c6c d209 0a0b 0c52 2430 5624 636c 6173 7380 0280 0356 7465 6565 6573 d20f 1011 125a 2463 6c61 7373 6e61 6d65 5824 636c 6173 7365 735f 1011 5365 6365 6375 7265 4366469 667 2e55 7365 72a2 1314 5f10 1153 6563 7572 6543 6f64 6e 672e 5573 6572 584e 534f 626a 6563 457f 100f 453 e479b65 665 41 76463 66869 7d672 7348 11f680
谁能展示一下解码原始信息的方法,它的格式是'NSPropertyList binary Format_v1_0',能展示一下如何从这个二进制文件中提取'teeees‘吗?
发布于 2018-04-06 21:41:27
类不是“安全的”,因为它的名称中包含此文本。无详细说明的安全性(例如加密、完整性保护等)它的局限性是无用的。文档明确指出,它只是安全的against object substitution attacks。
这完全意味着替换文件或更改内容并不容易。
任何地方都没有声明过它可以用于“安全地将数据存储到磁盘”。因此,与Keychain相比,NSSecureCoding用于完全不同的用例,Keychain致力于为一个或多个用户提供“密码、密钥、证书和笔记的安全存储”。
编辑:查看您添加的编码数据示例,它包含大量明文数据,包括teeees。您可以使用任何十六进制编辑器或strings命令查看它。
https://stackoverflow.com/questions/49693795
复制相似问题