我已经在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。如何解密此存储的密码。
任何可以提供帮助的人都可以检索存储在本地项目钥匙串中的密码。