为什么我尝试将密钥保存到钥匙串时又得到errSecParam(-50)?

时间:2019-04-26 14:28:27

标签: ios swift keychain

在此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个字节的DataapplicationTag也是Data

let applicationTag = "example".data(using: .utf8)!

但是,我最终还是收到了errSecParam(-50)错误。有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

仔细阅读documentationerrSecParam(-50)表示传递给该函数的一个或多个参数为not valid。该链接将您带到可以查看状态说明的站点。

  

至少要分别使用kSecAttrKeyTypekSecAttrKeySizeInBits参数指定要创建的密钥的类型和大小。

这将导致您遇到下一个问题:没有kSecAttrKeyTypeAESApple developer forums对此进行了讨论和回答。这里的建议是使用kSecClassGenericPassword