我已经在safari中保存了一个网站的用户名和密码,Safari将这些信息保存在Local Items keychain中,如何使用Objective C检索存储的信息?

我试图通过safari检索存储在OS X版本10.11.4中的本地项目钥匙串中的网站密码 .

如果我访问存储在登录钥匙串中的用户名和密码 . 然后可以通过下面的代码检索用户名和密码 .

OSStatus status;
NSString *account = @"Safari";

const char *cService_name = "PersonalFormsAutoFillDatabase";
UInt32 service_length = strlen(cService_name);

const char *cAccount_name = [account    cStringUsingEncoding:NSUTF8StringEncoding];
UInt32 account_length = strlen(cAccount_name);

void *passwordData = nil;
SecKeychainItemRef itemRef = nil;
UInt32 passwordLength = 0;
 status = SecKeychainFindGenericPassword(NULL, service_length, cService_name, account_length, cAccount_name, &passwordLength, &passwordData, NULL);



NSString *pw = [[NSString alloc]initWithBytes:passwordData length:passwordLength encoding:NSUTF8StringEncoding];

当我在代码系统上面运行时会弹出一个弹出窗口,并要求允许检索密码 . 如果我想将默认登录密钥链更改为另一个密钥链,则用户需要为下面的代码创建新密钥链的引用,并且需要在SecKeychainFindGenericPassword方法中传递新密钥链的引用 .

SecKeychainRef keychain ;
OSStatus status1 =  SecKeychainOpen("/Users/xxxx/Library/Keychains/mykeychain.keychain", &keychain);
if(status1 != errSecSuccess) {
    NSLog(@"Failed to open System keychain %@", SecCopyErrorMessageString(status1, NULL));

}
status1 = SecKeychainUnlock(keychain, 0, NULL, FALSE);

我的第一个问题是本地物品钥匙串的路径如“/Users/xxxx/Library/Keychains/mykeychain.keychain”?

因为我没有路径然后我创建了一个新的钥匙串从File-> Add KeyChain并给出名称testing.keychain . 之后,我将一个钥匙串项目复制到Local Items keychain并粘贴到testing.keychain中 . 并使用上面的代码并更改了如下路径 .

SecKeychainRef keychain ;
OSStatus status1 =  SecKeychainOpen("/Users/xxxx/Library/Keychains/testing.keychain", &keychain);
if(status1 != errSecSuccess) {
    NSLog(@"Failed to open System keychain %@", SecCopyErrorMessageString(status1, NULL));

}
status1 = SecKeychainUnlock(keychain, 0, NULL, FALSE);

并在查找通用密码方法中传递引用,并将服务名称和帐户名称更改为"a@gmail.com"和服务名称“https://accounts.google.com

status = SecKeychainFindGenericPassword(keychain, service_length, cService_name, account_length, cAccount_name, &passwordLength, &passwordData, NULL);

这返回密码数据,但我认为它是在加密模式,然后它返回NULL . 如何解密此存储的密码 .

任何可以提供帮助的人都可以检索存储在Local Items钥匙串中的密码 .