目标C:我们如何检索存储在密钥链中的本地项目中的信息?

时间:2016-06-30 06:20:20

标签: objective-c security keychain

我已经在safari中保存了网站的用户名和密码,Safari将这些信息保存在Local Items钥匙串中,如何使用目标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”?

由于我没有路径,所以我创建了一个新的钥匙串From 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。如何解密此存储的密码。

任何可以提供帮助的人都可以检索存储在本地项目钥匙串中的密码。

0 个答案:

没有答案