Ios Swit-我想获取存储在钥匙链中的值
我想得到这些值(组、ID、密码)存储在钥匙链中 我只能得到密码。我想获取组和ID Get方法是Ios Swit-我想获取存储在钥匙链中的值,ios,swift,keychain,Ios,Swift,Keychain,我想得到这些值(组、ID、密码)存储在钥匙链中 我只能得到密码。我想获取组和ID Get方法是getKeyChain import Foundation // キーチェーンの保存・取得を管理する extension ViewController { // 保存 func saveKeyChain() { // group let grp = "AA" // ID let id = "0001"
getKeyChain
import Foundation
// キーチェーンの保存・取得を管理する
extension ViewController {
// 保存
func saveKeyChain() {
// group
let grp = "AA"
// ID
let id = "0001"
// password
let str = "test"
let data = str.data(using: .utf8)
guard let _data = data else {
return
}
// APIを実行する際の引数設定
// これをSecItemCopyMatching の第一引数に渡すと結果を受け取ることができる
let dic: [String: Any] = [kSecClass as String: kSecClassGenericPassword, // パスワードクラス
kSecAttrGeneric as String: grp, // 自由項目(グループとする)
kSecAttrAccount as String: id, // アカウント(ログインID)
kSecValueData as String: _data, // パスワード本体
kSecAttrService as String: "test"] // サービス名
print(dic)
var itemAddStatus: OSStatus?
// 保存データが存在するかの確認
let matchingStatus = SecItemCopyMatching(dic as CFDictionary, nil)
if matchingStatus == errSecItemNotFound {
// 保存
itemAddStatus = SecItemAdd(dic as CFDictionary, nil)
} else if matchingStatus == errSecSuccess {
// 更新
itemAddStatus = SecItemUpdate(dic as CFDictionary,[kSecAttrGeneric as String: _data] as CFDictionary)
itemAddStatus = SecItemUpdate(dic as CFDictionary,[kSecAttrAccount as String: _data] as CFDictionary)
itemAddStatus = SecItemUpdate(dic as CFDictionary,[kSecValueData as String: _data] as CFDictionary)
} else {
print("保存失敗")
}
// 保存・更新ステータス確認
if itemAddStatus == errSecSuccess {
print("正常終了")
} else {
print("保存失敗")
}
}
// 取得
func getKeyChain(key: String) -> String? {
let dic: [String: Any] = [kSecClass as String: kSecClassGenericPassword,
kSecAttrService as String: key,
kSecReturnData as String: kCFBooleanTrue as Any,
kSecMatchLimit as String : kSecMatchLimitOne]as [String : Any]
var data: AnyObject?
// ポインタ:変数のメモリ上の位置(番地)を格納している
// 変数をポインタに変換してポインタ経由でアクセスする
let matchingStatus = withUnsafeMutablePointer(to: &data){
SecItemCopyMatching(dic as CFDictionary, UnsafeMutablePointer($0))
}
if matchingStatus == errSecSuccess {
print("取得成功")
if let getData = data as? Data,
let getStr = String(data: getData, encoding: .utf8) {
return getStr
}
print("取得失敗: Dataが不正")
return nil
} else {
print("取得失敗")
return nil
}
}
// 削除
func deleteKeyChain() {
// 削除するqueryを設定
let dic: [String: Any] = [kSecClass as String: kSecClassGenericPassword,
kSecAttrService as String: "test"] // サービス名
if SecItemDelete(dic as CFDictionary) == errSecSuccess {
print("削除成功")
} else {
print("削除失敗")
}
}
}
您更新的方法没有意义,您的
get
方法没有帐户
。如何获取帐户?这是您在save
方法中使用的id
。您的save
和get
方法必须使用相同的请求。相同的服务和相同的帐户。不可能获取“kSecAttrService”作为密钥吗?我想获取所有密钥。。。