iOS如何在钥匙串中保存多个密码

6

我想在我的钥匙串中保存两个密码(一个应用程序PIN和一个后端PIN),并想知道这应该如何工作。
我使用KeychainItemWrapper与两个不同的标识符。

KeychainItemWrapper *kcw1 = [[KeychainItemWrapper alloc] initWithIdentifier:id1 accessGroup:nil];
KeychainItemWrapper *kcw2 = [[KeychainItemWrapper alloc] initWithIdentifier:id2 accessGroup:nil];

我正在使用其中一个来保存和检索应用程序或后端的PIN码。

我使用:

[self.kcw1 setObject:aVerifyCode forKey:(__bridge id) kSecValueData]
[self.kcw2 setObject:aAppPin forKey:(__bridge id) kSecValueData]

但是它并没有起作用-结果是-25299-指定的项已经存在于钥匙串中。

那么,我该如何在我的钥匙串中保存多个密码?


[[KeychainItemWrapper alloc] id1 accessGroup:nil]; <== 这怎么可能编译通过? - user529758
抱歉,这篇文章不是复制粘贴的,而是我自己写的!我进行了编辑... - Alexander
1个回答

9
好的,我想我知道问题出在哪了! KeychainItemWrapper使用标识符作为kSecAttrGeneric。
但这不是区分条目的关键。如果您想在

kSecValueData

中保存两个帐户或两个密码,则会出现重复条目的错误(-25299)。
原因是Apple密钥链API使用

kSecAttrAccount

kSecAttrService

来区分条目。
因此,您可以像本主题中所示那样修改keychainItemWraper


1
我发现KeychainItemWrapper有各种小漏洞。在使用它并为多个项目修改它后,我创建了一个更简单的包装器来访问Keychain https://github.com/reidmain/FDKeychain - Reid Main

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接