Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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
Ios 在密钥链中存储凭据时不仅要加密密码_Ios_Swift3_Keychain - Fatal编程技术网

Ios 在密钥链中存储凭据时不仅要加密密码

Ios 在密钥链中存储凭据时不仅要加密密码,ios,swift3,keychain,Ios,Swift3,Keychain,我需要在我的应用程序的keychain中存储userLogin和userPassword(包含使用keychain的应用程序和扩展名)。由于我一直在寻找一些如何做到这一点的例子,我没有找到适合我需要的例子 几乎每个示例都将userLogin视为密钥链项目属性(未加密)。我需要存储加密的凭据(userLogin+userPassword)。如何在不使用kSecAttrAccount属性的情况下存储它。我是否需要存储两个项目(一个用于登录,一个用于密码) 我没有使用密钥链包装器,所以纯原始密钥链ap

我需要在我的应用程序的keychain中存储userLogin和userPassword(包含使用keychain的应用程序和扩展名)。由于我一直在寻找一些如何做到这一点的例子,我没有找到适合我需要的例子

几乎每个示例都将userLogin视为密钥链项目属性(未加密)。我需要存储加密的凭据(userLogin+userPassword)。如何在不使用
kSecAttrAccount
属性的情况下存储它。我是否需要存储两个项目(一个用于登录,一个用于密码)

我没有使用密钥链包装器,所以纯原始密钥链api中的答案将非常好


我的总体目标是向用户询问一次用户名和用户密码,对其进行身份验证,如果成功,则获取authenticationToken并将其存储在密钥链中。在下一次应用程序运行期间,我需要从keychain获取此令牌,但我不再有
kSecAttrAccount
。我不想再次要求用户输入用户名以获取authenticationToken。所以我认为我可以同时存储这两个(用户名和用户密码)在keychain加密或仅存储authenticationToken,但如何在没有帐户信息的情况下获取它。

让我们假设“游乐场”服务需要在shell的游乐场环境变量中提供密码。将密码放入~/.bashrc将完成以下操作:

导出游乐场=“monkeybars”

向您的钥匙链添加秘密

要向密钥链添加机密,可以使用图形应用程序(“密钥链访问”)或命令行实用程序安全性(1)

在下面的示例中,我们将为一个名为“游乐场”的应用程序创建密码:

钥匙链访问

打开/Applications/Utitlies/Keychain\Access.app

你可以检查我的问题,但实际上你会得到详细的代码如何做你想做的事情-它应该有帮助:)

整个代码中最重要的是:

//  
//  This two valuse ideifieis the entry, together they become the
//  primary key in the Database
//
kSecAttrService: "app_name",
kSecAttrAccount: "first_name"
您可以设置此值,这样您就知道他们是开发人员:)这两个值是SQL数据库中通常使用的唯一键。但既然苹果喜欢做不同的事情,那么你就有两个价值观——因为原因;)

因此,当您更新、删除或选择时,必须传递您设置的这两个值。例如:

kSecAttrService: "com.epic.app",
kSecAttrAccount: "login"
保存用户登录名

kSecAttrService: "com.epic.app",
kSecAttrAccount: "password"

保存用户密码。

只需使用硬编码的帐户名,并将用户名和密码作为字典存储在数据中。keychain项的数据可以是您想要的任何内容,因此使用
NSKeyedArchiver
将字典转换为数据,或者如果更方便的话将其转换为JSON。在iOS上,每个应用程序组都有自己的“虚拟”钥匙链(即不同的应用程序组不会相互干扰,即使它们位于同一物理钥匙链中),因此您不必担心与任何人发生碰撞。只要使用您方便的字段值即可。仅仅因为它标记为“account”,并不意味着您必须将用户名放在那里。

但是在获取加密数据时,我需要提供扩展名根本不知道的
kSecAttrAccount
。我不想向用户询问帐户,然后从密钥链获取此帐户的密码。更新了我的答案,请检查:)谢谢。现在我知道该怎么处理了。kSecAttrAccount可以是某种id属性,可以帮助我识别钥匙链中的项目。它不需要是用户名等。。。完全正确:)而超级混乱的苹果文档再次袭来:这对我有什么帮助?我使用的是OSXThanks的keychainapi而不是UI工具来解释。是的,由于“account”属性的命名,我在错误的上下文中思考。因此,我想我会将json存储在一个keychain项中,并将该项的标识符放入ksecatargeneric中,这样以后就可以很容易地获取、删除或更新它。@MarcinKapusta我们可以在任何ios设备上的keychain中保存数据吗,或者如果用户登录或未登录,则存在某些条件?您好,你知道kSecAttrAccount和kSecAttrGeneric的区别吗?我不知道该如何使用kSecAttrGeneric钥匙。我想在应用程序中保存不同的值,而不仅仅是密码。使用
kSecClassGenericPassword
存储任意数据。上面写着“密码”,但它只是指“值”