我在这个storing_keys_in_the_keychain之后有以下代码。
func generateInitialKey() -> Data {
let key = AES256.randomKey()
let addQuery: Dictionary<String, Any> = [
kSecClass as String: kSecClassKey,
kSecAttrApplicationTag as String: applicationTag,
kSecValueRef as String: key
]
let status = SecItemAdd(addQuery as CFDictionary, nil)
print(errSecParam, status)
guard status == errSecSuccess else { fatalError("Can't save Key") }
return key
}
函数AES256.randomKey()
生成64字节的Data
。 applicationTag
也是Data
:
let applicationTag = "example".data(using: .utf8)!
但是,我最终收到errSecParam(-50)
错误。有人可以帮我吗?
仔细阅读documentation。 errSecParam(-50)
表示传递给函数的一个或多个参数是not valid。该链接将您引导至可以查看状态描述的站点。
至少,您可以分别使用
kSecAttrKeyType
和kSecAttrKeySizeInBits
参数指定要创建的键的类型和大小。
这将导致您遇到下一个问题:没有kSecAttrKeyTypeAES
。这已在Apple developer forums上讨论和回答。建议使用kSecClassGenericPassword
。