iOS NSCoding与NSSecureCoding
NSCoding与NSSecureCoding相比于NSSecureCoding 更安全。防止替换攻击,保证你读到的数据正是你写入的数据
NSCoding
@implementation People
- (void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:self.name forKey:NSStringFromSelector(@selector(name))];
[aCoder encodeObject:self.age forKey:NSStringFromSelector(@selector(age))];
}
- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder
{
if (self = [super init]) {
self.name = [aDecoder decodeObjectForKey:NSStringFromSelector(@selector(name))];
self.age = [aDecoder decodeObjectForKey:NSStringFromSelector(@selector(age))];
}
return self;
}
@end
#
People *p1 = [People new];
p1.name = @"A";
p1.age = @5;
People *p2 = [People new];
p2.name = @"B";
p2.age = @6;
NSArray *dataArray = @[p1,p2];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:dataArray];
NSLog(@"data:%@",data);
NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:data];
NSLog(@"datArray:%@",array);
NSSecureCoding
@implementation SecurePeople
+ (BOOL)supportsSecureCoding
{
return YES;
}
- (void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:self.name forKey:NSStringFromSelector(@selector(name))];
[aCoder encodeObject:self.age forKey:NSStringFromSelector(@selector(age))];
}
- (instancetype)initWithCoder:(NSCoder *)aDecoder
{
if (self = [super init]) {
self.name = [aDecoder decodeObjectOfClass:[NSString class] forKey:NSStringFromSelector(@selector(name))];
self.age = [aDecoder decodeObjectOfClass:[NSString class] forKey:NSStringFromSelector(@selector(age))];
}
return self;
}
@end
#
SecurePeople *secureP1 = [SecurePeople new];
secureP1.name = @"A";
secureP1.age = @(49);
SecurePeople *secureP2 = [SecurePeople new];
secureP2.name = @"B";
secureP2.age = @3;
NSArray *dataSecureArray = @[secureP1,secureP2];
NSData *secureData = [NSKeyedArchiver archivedDataWithRootObject:dataSecureArray];
NSLog(@"secureData:%@",secureData);
NSArray *asecureArray = [NSKeyedUnarchiver unarchiveObjectWithData:secureData];
NSLog(@"asecureArray:%@",((SecurePeople*)[asecureArray firstObject]).age);
本文对比了iOS中NSCoding与NSSecureCoding的区别及应用。NSCoding提供了一种简单的对象归档方式,而NSSecureCoding在此基础上增加了安全性检查,防止数据被恶意篡改。通过示例代码展示了两种归档方式的具体实现。
1669

被折叠的 条评论
为什么被折叠?



