我使用PuTTYgen生成密钥对并使用Pageant登录,因此我必须在系统启动时输入一次密码短语.
我如何在Linux中实现这一目标?我听说过,keychain但我听说它使用了不同的密钥对格式 - 我不想更改我的Windows密钥,如果我可以在Windows和Linux中以相同的方式无缝连接,那就太好了.
我的iOS应用程序中有一个登录屏幕.NSUserDefaults当您再次进入应用程序时,用户名和密码将保存在再次加载到登录屏幕中(当然,这NSUserDefaults是永久性的).
现在,用户可以禁用用户名/密码保存功能.
那么NSUserDefaults将被清除.
但在我的应用程序中,我需要这个用户名/密码用于用户的数据库查询.那么:除了存储数据的位置NSUserDefaults?(当用户退出应用程序或注销时,可以/应该删除此位置).
我正在尝试学习从Xcode加载我的iPhone上的应用程序.当我这样做时,我会在你的钥匙串中继续获得"Codeign想要访问密钥"访问权限,我把我的登录密码放在一边又一遍又一遍地弹出.我已经多次尝试过我的电脑登录,苹果账号密码,很多其他的.
我正在使用idandersen的scifihifi-iphone代码进行钥匙串和使用保存密码
[SFHFKeychainUtils storeUsername:@"User" andPassword:@"123"
forServiceName:@"TestService" updateExisting:YES error:&error];
Run Code Online (Sandbox Code Playgroud)
当我从设备中删除应用程序时,密码仍保留在钥匙串中.
我想在用户从设备中删除应用程序时从密钥链中删除密码.我怎样才能做到这一点?
我有一个苹果我用来开发iPhone应用程序使用的XCode 4,我现在有一个新的Macintosh用新安装的...一切.
当打开在旧Mac上构建的Xcode项目时,我无法在配置为开发iPhone的iPhone上运行该应用程序.
Xcode 4组织者在我的配置文件中告诉我"找不到有效的签名身份".
我想这与我之前在旧Mac上生成的.certSigningRequest文件有关(我有一个该文件的备份),但是我在新Mac上有什么用呢?
另一个奇怪的事情是,即使在刷新之后和输入我的配置门户登录名和密码之后,我也没有在组织者中看到我现有的5个配置文件(在Apple配置门户上定义):

有时,当我在Xcode上运行设备上的应用程序时,我会尝试访问密钥链但由于错误-34018而失败.这与任何记录的钥匙串错误代码都不匹配,并且无法一致地再现.(可能有30%的时间发生,我不清楚为什么会发生这种情况).使调试这个问题变得非常困难的原因是完全缺乏文档.知道是什么导致这个以及如何解决它?我正在使用Xcode 5并在设备上运行iOS 7.0.4.
这里有一个公开的问题:https://github.com/soffes/sskeychain/issues/52
编辑:每个请求添加钥匙串访问代码
我正在使用该SSKeychain库与钥匙串连接.这是片段.
#define SERVICE @"default"
@implementation SSKeychain (EXT)
+ (void)setValue:(NSString *)value forKey:(NSString *)key {
NSError *error = nil;
BOOL success = NO;
if (value) {
success = [self setPassword:value forService:SERVICE account:key error:&error];
} else {
success = [self deletePasswordForService:SERVICE account:key error:&error];
}
NSAssert(success, @"Unable to set keychain value %@ for key %@ error %@", value, key, error);
if (!success) {
LogError(@"Unable to set value to keychain %@", error);
}
LogTrace(@"Will set …Run Code Online (Sandbox Code Playgroud) 我的问题涉及iOS(iPhone,iPad,...)中的钥匙串.我认为(但不确定)Mac OS X下的钥匙串的实现会以相同的答案提出同样的问题.
iOS提供五种类型(类)的钥匙串项.您必须为密钥选择这五个值中的一个kSecClass来确定类型:
kSecClassGenericPassword used to store a generic password
kSecClassInternetPassword used to store an internet password
kSecClassCertificate used to store a certificate
kSecClassKey used to store a kryptographic key
kSecClassIdentity used to store an identity (certificate + private key)
Run Code Online (Sandbox Code Playgroud)
经过阅读苹果文档,博客和论坛条目很长一段时间,我发现这种类型的钥匙串项目kSecClassGenericPassword从属性得到它的独特性kSecAttrAccessGroup,kSecAttrAccount和kSecAttrService.
如果请求1中的这三个属性与请求2中的相同,则无论其他任何属性如何,您都会收到相同的通用密码keychain项.如果此属性中的一个(或两个或全部)更改其值,则会获得不同的项目.
但是kSecAttrService仅适用于类型的项目kSecClassGenericPassword,因此它不能成为任何其他类型的项目的"唯一键"的一部分,并且似乎没有文档明确指出哪些属性唯一地确定了钥匙串项目.
"GenericKeychain"类"KeychainItemWrapper"中的示例代码使用该属性kSecAttrGeneric使项目唯一,但这是一个错误.此示例中的两个条目仅存储为两个不同的条目,因为它们kSecAttrAccessGroup不同(一个设置了访问组,另一个允许它自由).如果您尝试使用Apple's添加没有访问组的第二个密码KeychainItemWrapper,则会失败.
那么,请回答我的问题:
kSecAttrAccessGroup,kSecAttrAccount并且kSecAttrService是一个钥匙串项目,其kSecClass是"唯一钥匙" kSecClassGenericPassword? kSecClass不是kSecClassGenericPassword?我在编译Xcode项目时被要求输入系统管理员用户名和密码.整个信息是
Mac OS X想要进行更改.输入管理员的名称和密码以允许此操作.Mac OS X想要使用系统密钥链.
有人有解决方案吗?
我目前正在iOS KeyChain中存储用户名(电子邮件)和电子邮件和密码的盐渍哈希.我正在使用这里发现的ARC'ified版本.
KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"MyCustomIdentifier" accessGroup:nil];
[wrapper setObject:APP_NAME forKey:(__bridge id)kSecAttrService];
[wrapper setObject:email forKey:(__bridge id)kSecAttrAccount];
[wrapper setObject:token forKey:(__bridge id)kSecValueData];
Run Code Online (Sandbox Code Playgroud)
当我需要在应用程序处于活动状态时拉出令牌以进行网络呼叫时,这一切都正常.它适用于从干净的启动登录,以及整个网络调用.当应用程序在后台时,问题就开始了.
请记住,这只是零星发生,我还没有把它固定到特定的iOS版本或设备上.
用户绊倒一个位置(区域监控),我想用他们的状态更新服务器.我尝试将令牌从钥匙串中取出,就像我为每个其他网络呼叫所做的那样,并更新状态.但对于一些用户来说,价值是零.没有它,我无法更新网络内容.为什么这对大多数人有效,但对于一小部分人来说不是这样?
KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"MyCustomIdentifier" accessGroup:nil];
NSString *token = [wrapper objectForKey:(__bridge id)kSecValueData];
Run Code Online (Sandbox Code Playgroud)
我已经回到了keychainwrapper的非ARC版本,但我仍然得到了相同的结果.我将不胜感激任何反馈.它只是我用户的一小部分,但这是一个我想解决的问题而不用担心.提前致谢.
此外,我的所有后台工作都在backgroundTask中设置,以防止事情超时.我对钥匙链的工作没有任何问题,但在令牌填满之前我不会让事情继续下去.
编辑 我发现我的问题是他们的钥匙串没有从后台检索值.我将在下面发布答案并接受它,因为我觉得这个问题可能会在以后对其他人有价值.
keychain ×10
ios ×6
xcode ×4
iphone ×2
objective-c ×2
access ×1
background ×1
certificate ×1
cocoa ×1
codesign ×1
git ×1
lockscreen ×1
macos ×1
pageant ×1
putty ×1
ssh-keys ×1
sskeychain ×1