在此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)
错误。有人可以帮我吗?
答案 0 :(得分:1)
仔细阅读documentation。 errSecParam(-50)
表示传递给该函数的一个或多个参数为not valid。该链接将您带到可以查看状态说明的站点。
至少要分别使用
kSecAttrKeyType
和kSecAttrKeySizeInBits
参数指定要创建的密钥的类型和大小。
这将导致您遇到下一个问题:没有kSecAttrKeyTypeAES
。 Apple developer forums对此进行了讨论和回答。这里的建议是使用kSecClassGenericPassword
。