如何快速在钥匙串中保存名称和密码详细信息

时间:2019-03-20 17:54:16

标签: ios swift3 keychain

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

以下是我在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

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

1 个答案:

答案 0 :(得分: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