DYFKeychain 1.2.0

DYFKeychain 1.2.0

Tenfay 负责。



  • Tenfay

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 项。

License MIT  CocoaPods Version  CocoaPods Platform 

中文说明 (中文说明)

组 (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

检查操作是否成功

您可以通过检查它们的返回值来验证adddeleteclear方法是否已成功完成。这些方法在成功时返回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的学习如何在以下示例中。

欢迎反馈

如果您发现任何问题,可创建问题。我将很乐意帮助您。