Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
您使用哪个属性在Keychain中存储密码(使用iOS)?_Ios_Security_Swift_Keychain - Fatal编程技术网

您使用哪个属性在Keychain中存储密码(使用iOS)?

您使用哪个属性在Keychain中存储密码(使用iOS)?,ios,security,swift,keychain,Ios,Security,Swift,Keychain,(我用的是Swift。) 我有以下字典要传递到SecItemAdd() var attributes=[kSecClass as String:kSecClassInternetPassword, kSecAttrAccessible:kSecAttrAccessible仅当未锁定此设备时, kSecAttrDescription:“Alexander的应用程序帐户密码”, kSecAttrAccount:self.usernameField.text,/*这是UITextField的出口*/

(我用的是Swift。)

我有以下
字典
要传递到
SecItemAdd()

var attributes=[kSecClass as String:kSecClassInternetPassword,
kSecAttrAccessible:kSecAttrAccessible仅当未锁定此设备时,
kSecAttrDescription:“Alexander的应用程序帐户密码”,
kSecAttrAccount:self.usernameField.text,/*这是UITextField的出口*/
kSecAttrServer:“http://www.hausofalexander.tk/“,/*这是我的服务器的域*/
kSecAttrAuthenticationType:kSecAttrAuthenticationTypeHTTPBasic,
kSecValueData:self.passwordField.text];/*这也是UITextField*/

然后我调用
SecItemAdd(属性为CFDictionaryRef,nil)

我正在接收
errSecParam
(这是错误
-50
),因为我正在向
SecItemAdd()
传递一个无效参数(
attributes
)。我假设这是因为我的
属性
变量中有一对
kSecValueData
,根据参考,该变量不适用于iOS的
kSecClassInternetPassword

但是,我完全能够使用
kSecValueData
作为属性,并使用Cocoa为其设置一个值(如在Mac开发中)。我制作了一个Mac应用程序来测试它,然后寻找具有钥匙链访问权限的项目,发现它确实存在。然而,这是使用了
kSecClassGenericPassword
ksecclasss
(我不知道这是否相关,但这个测试应用程序是我用Objective-C编写的)。此时,我决定检查在iOS应用程序中使用
kSecClassGenericPassword
时哪些属性可用。遗憾的是,
kSecValueData
也不能用于该
kSecClass

因此,如果
kSecValueData
不是
kSecClassGenericPassword
kSecClassInternetPassword
,或者任何其他
kSecClass
项目的适用属性,我该在世界上的何处设置密码

我注意到我可以使用
ksecatargeneric
与这些
kSecClass
项(即
kSecClassGenericPassword
kSecClassInternetPassword
)一起使用,它的值为
CFDataRef
。我假设这意味着我需要将
NSData
(作为
CFDataRef
)传递到此属性,但是作为
NSData
传递什么呢?那应该是一本
字典吗?这应该是密码字符串的值吗?这是否意味着我可以让任何
kSecAttr*
以某种方式重视自己


谢谢你的阅读。如果我把你弄糊涂了,一定要告诉你,我会很乐意进一步详细解释。

也许这会有帮助-我已经尝试了一段时间,但是
kSecValueData
根本不适用。我尝试了
var attributes=[kSecClass as String:kSecClassGenericPassword,kSecAttrAcces…诸如此类…trAccount:self.usernameField.text,kSecValueData as String:self.passwordField.text.dataUsingEncoding(NSASCIIStringEncoding,allowLossyConversion:false)]。在记录应用程序的所有密钥链项目后,我发现
kSecValueData
没有被添加为属性。使用
kSecGenericItem
是否是一种不好的做法?这在这里工作得很好。我在让这些在模拟器中工作时遇到了问题,但它最终在一台设备上工作。苹果的示例项目帮助我解决了这些问题。