如何在swift中保存Keychain中的名称和密码详细信息

问题描述 投票:0回答:1

我正在使用UserDefaults来存储和检索名称和密码的详细信息,但现在我想将名称和密码详细信息存储在钥匙串中以用于安全目的。我经历了这么多教程,但我不明白。是否有必要添加任何git框架,或者我们可以手动保存和检索名称和密码详细信息。如果有必要添加git框架那么请建议我在swift中存储名称和密码的最佳keychain框架。

下面是我在UserDefaults中的代码:

在注册viewcontroller中

UserDefaults.standard.set(regNameTextField.text, forKey: "name")
UserDefaults.standard.set(regPasswordTextField.text, forKey: "password")

在登录viewcontroller中

let storedregName = UserDefaults.standard.value(forKey: "name") as! String
let storedregPassword = UserDefaults.standard.value(forKey: "password") as! String

请帮我在钥匙串中存储名称和密码值。

ios swift3 keychain
1个回答
0
投票

看看这个例子:

定义一个结构,以便在内存中移动应用程序时保存凭据:

struct Credentials {
    var username: String
    var password: String
}

接下来,定义可用于传递密钥链访问结果的错误枚举:

enum KeychainError: Error {
    case noPassword
    case unexpectedPasswordData
    case unhandledError(status: OSStatus)
}

然后,确定您的应用正在使用的服务器:

static let server = "www.example.com"

创建添加查询使用凭证结构和服务器常量的实例,您可以创建添加查询:

let account = credentials.username
let password = credentials.password.data(using: String.Encoding.utf8)!
var query: [String: Any] = [kSecClass as String: kSecClassInternetPassword,
                            kSecAttrAccount as String: account,
                            kSecAttrServer as String: server,
                            kSecValueData as String: password]

添加项目查询完成后,您只需将其提供给SecItemAdd(_:_:)函数:

let status = SecItemAdd(query as CFDictionary, nil)
guard status == errSecSuccess else { throw KeychainError.unhandledError(status: status) }

Source

© www.soinside.com 2019 - 2024. All rights reserved.