在 iOS 开发中,Keychain 是一个强大的安全存储机制,用于存储敏感信息,如密码、证书、密钥、会话令牌等。Keychain 提供了比 NSUserDefaults 更高的安全性,因为它将数据存储在受保护的区域,并且只有应用程序本身可以访问这些数据。以下是 Keychain 的详细作用和用途。
Keychain 的作用
安全存储:
加密存储:Keychain 使用硬件加密技术来保护存储的数据,确保数据在设备上安全。
访问控制:通过访问控制列表(ACL)控制数据的访问权限。
持久化:
数据在应用程序重新安装后仍然存在,除非用户重置设备或删除所有应用数据。
跨应用共享:
通过 Keychain Access Groups,多个应用程序和扩展可以共享同一份 Keychain 数据。
自动备份:
Keychain 数据可以与 iCloud 备份一起自动备份,确保数据在设备更换时仍然可用。
系统管理:
Keychain 由操作系统管理,提供了一致的安全性和稳定性。
Keychain 的用途
存储密码和凭证:
用户登录凭证(如用户名和密码)。
OAuth 令牌和会话令牌。
存储证书和密钥:
SSL/TLS 证书。
加密密钥(对称密钥和非对称密钥)。
存储敏感信息:
支付信息。
个人身份信息(PII)。
跨应用共享数据:
主应用和其扩展(如 Today Extensions、WatchKit 扩展、SiriKit 扩展等)之间的数据共享。
不同应用之间的数据共享(通过相同的 Access Group)。
自动备份:
确保关键数据在设备更换时仍然可用。
使用教程
1.pod 导入 pod 'UICKeyChainStore'
2.配置 Capabilities
3.配置 Entitlements 文件
配置 Keychain Access Groups,点击+号,新增string $(AppIdentifierPrefix)+服务名即可 ,服务名对应代码中的服务名
4.导入头文件 #import <UICKeyChainStore/UICKeyChainStore.h>
5.简单使用教程
- (void) writeToKeyChain{
UICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithService:@"aaa.bleTest"];
// 存储数据
[keychain setString:@"mySecretPassword" forKey:@"password"];
}
- (void) getFromKeyChain{
UICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithService:@"aaa.bleTest"];
// 读取数据
NSString *sercet = [keychain stringForKey:@"password"];
NSLog(@"钥匙串读取-----%@---%@",sercet,keychain[@"password"]);
}