DYFKeychain
此库用于在 Keychain 中存储文本和数据。正如你可能注意到的,Apple 的 Keychain API 有点冗长。这个库旨在通过提供更简短的语法来完成简单任务:为指定的密钥读取/写入文本值
DYFKeychain *keychain = [DYFKeychain createKeychain];
[keychain add:@"User Account Passcode" forKey:@"kUserAccPasscode"];
NSString *p = [keychain get:@"kUserAccPasscode"];
Keychain 库包括以下功能
- 获取、设置和删除字符串、布尔值和 Data Keychain 项。
- 指定项访问安全级别。
- 通过 iCloud 同步项。
- 与其他应用程序共享 Keychain 项。
组 (ID:614799921)
安装
使用 CocoaPods
target 'Your target name'
pod 'DYFKeychain'
or
pod 'DYFKeychain', '~> 1.1.0'
或手动添加来自 Keychain 目录的文件。
何为Keychain?
Keychain是一个安全存储。您可以在其中存储各种敏感数据,例如用户密码、信用卡号码、密钥令牌等。一旦将信息存储在Keychain中,这些信息仅可供您的应用程序访问,其他应用程序无法看到它。此外,操作系统确保这些信息安全地存储和处理。例如,存储在Keychain中的文本无法从iPhone备份或其文件系统中提取。苹果建议只将少量数据存储在Keychain中。如果您需要保护大量数据,可以手动对其进行加密,将其保存到文件中,并将密钥存储在Keychain中。
使用方法
将#import "DYFKeychain.h"
添加到您的源代码中。
字符串值
DYFKeychain *keychain = [DYFKeychain createKeychain];
[keychain add:@"User Account Passcode" forKey:@"kUserAccPasscode"];
NSString *s = [keychain get:@"kUserAccPasscode"];
数据值
DYFKeychain *keychain = [DYFKeychain createKeychain];
[keychain addData:data forKey:@"kCommSecureCode"];
NSData *data = [keychain getData:@"kCommSecureCode"];
布尔值
DYFKeychain *keychain = [DYFKeychain createKeychain];
[keychain addBool:YES forKey:@"kFirstInstalledAndLaunched"];
BOOL ret = [keychain getBool:@"kFirstInstalledAndLaunched"];
从Keychain中删除密钥
DYFKeychain *keychain = [DYFKeychain createKeychain];
[keychain delete:@"kFirstInstalledAndLaunched"]; // Remove single key.
[keychain clear]; // Delete everything from app's Keychain. Does not work on macOS.
高级选项
密钥链项目访问
使用options
参数指定密钥链存储的安全级别。默认使用DYFKeychainAccessOptionsAccessibleWhenUnlocked
选项。这是最严格的选择之一,提供了良好的数据保护。
DYFKeychain *keychain = [DYFKeychain createKeychain];
[keychain add:@"xxx" forKey:@"Key1" options:DYFKeychainAccessOptionsAccessibleWhenUnlocked];
如果您需要您的应用程序在后台访问密钥链项,则可以使用DYFKeychainAccessOptionsAccessibleAfterFirstUnlock
。请注意,它的安全性低于DYFKeychainAccessOptionsAccessibleAfterFirstUnlock
选项。
查看所有可用访问选项列表。
与其他设备同步密钥链项
将synchronizable
属性设置为YES
以启用密钥链项之间在用户的多台设备上的同步。对于已在设备上的iCloud设置中启用“密钥链”的用户,这将生效。
将synchronizable
属性设置为YES
将使用add
方法将项目添加到其他设备,并使用get
命令获取可同步的项目。删除可同步的项目将从所有设备中删除它。
请注意,您无需在应用程序的目标中启用iCloud或密钥链共享功能,此功能即可工作。
// The first device
DYFKeychain *keychain = [DYFKeychain createKeychain];
keychain.synchronizable = YES;
[keychain add:@"See you tomorrow!" forKey:@"key12"];
// The second device
DYFKeychain *keychain = [DYFKeychain createKeychain];
keychain.synchronizable = YES;
[keychain get:@"key12"];
我们无法在macOS上实现密钥链同步。
与其他应用共享密钥链项
为了在相同设备上的应用程序之间共享密钥链项,它们需要在“能力”>“密钥链共享”设置中注册共同的“密钥链组”。在线教程展示了如何设置它。
使用accessGroup
属性来访问共享密钥链项。在以下示例中,我们指定了一个用于设置、获取和删除“key1”项的访问组“9ZU3R2F3D4.com.omg.myapp.KeychainGroup”。
DYFKeychain *keychain = [DYFKeychain createKeychain];
keychain.accessGroup = @"9ZU3R2F3D4.com.omg.myapp.KeychainGroup" // Use your own access group.
[keychain add:@"hello world!" forKey:@"key12"];
[keychain get:@"key12"];
[keychain delete:@"key12"];
[keychain clear];
注意:在watchOS 2.0及其配对的设备之间无法共享钥匙串项:https://forums.developer.apple.com/thread/5938
检查操作是否成功
您可以通过检查它们的返回值来验证add
、delete
和clear
方法是否已成功完成。这些方法在成功时返回YES
,在出错时返回NO
。
DYFKeychain *keychain = [DYFKeychain createKeychain];
if ([keychain add:@"xxx" forKey:@"key1"]) {
// Keychain item is saved successfully
} else {
// Report error
}
要获取特定的失败原因,请使用包含上一个操作结果代码的osStatus
属性。参见钥匙串结果代码。
DYFKeychain *keychain = [DYFKeychain createKeychain];
[keychain add:@"xxx" forKey:@"key1"];
if (keychain.osStatus != errSecSuccess) { /* Report error */ }
以引用形式返回数据
使用asReference: YES
参数将数据作为引用返回,这对于NEVPNProtocol是必需的。
DYFKeychain *keychain = [DYFKeychain createKeychain];
[keychain addData:data forKey:@"key1"];
[keychain getData:@"key1" asReference:YES];
示例
DYFKeychain
的学习如何在以下示例中。
欢迎反馈
如果您发现任何问题,可创建问题。我将很乐意帮助您。