简介
虽然目前市面上有一些不错的加密相册App,但不是内置广告,就是对上传的张数有所限制。本文介绍了一个加密相册的制作过程,该加密相册将包括多密码(输入不同的密码即可访问不同的空间,可掩人耳目)、WiFi传图、照片文件加密等功能。目前项目和文章会同时前进,项目的源代码可以在github上下载。
点击前往GitHub
概述
本文主要介绍加密相册的登录验证与注册模块的实现。注册时只需要密码,每个密码对应一个独立的存储空间,登录时通过Touch ID或密码验证。如果有多套密码,Touch ID会被绑定到一个主密码上(可更改)。
账户数据存储设计
账户类设计
由于加密相册只用于本地,当前设计还未考虑密码找回,因此账户只需要密码这一字段即可,为了统计当前已有账户数量,再使用一个id字段,账户类SGAccount
设计如下。
@interface SGAccount : NSObject <NSSecureCoding>
@property (nonatomic, assign) NSInteger accountId;
@property (nonatomic, copy) NSString *password;
@end
为了进行归档存储,需要实现NSCoding的相关方法,如下。
#import "SGAccount.h"
NSString * const kSGAccountId = @"kSGAccountId";
NSString * const kSGAccountPwd = @"kSGAccountPwd";
@implementation SGAccount
- (void)encodeWithCoder:(NSCoder *)encoder {
[encoder encodeInteger:self.accountId forKey:kSGAccountId];
[encoder encodeObject:self.password forKey:kSGAccountPwd];
}
- (instancetype)initWithCoder:(NSCoder *)decoder {
if (self = [super init]) {
self.accountId = [decoder decodeIntegerForKey:kSGAccountId];
self.password = [decoder decodeObjectForKey:kSGAccountPwd];
}
return self;
}
+ (BOOL)supportsSecureCoding {
return YES;
}
@end
账户集合类设计
对于多个账户,使用一个账户集合类来管理,账户集合类管理所有的账户,由于登录验证时需要查询密码对应的账户是否存在,为了高效查找,应该使用以密码为key的Map,也就是NSDictionary来存储。
除此之外,还需要记录Touch ID对应的密码,综上所述,设计如下。