ios - 为什么 SecItemAdd 返回 -50(无效参数)

标签 ios objective-c iphone keychain

我想在钥匙串(keychain)中存储值“MyKeyValue”,我这样做:

NSData* key = [@"MyKeyValue" dataUsingEncoding:NSUTF8StringEncoding];
NSData* tag = [@"com.example.MyKey" dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary* addquery = @{ (id)kSecValueRef: key,
                            (id)kSecClass: (id)kSecClassKey,
                            (id)kSecAttrApplicationTag: tag,
                           };
OSStatus status = SecItemAdd((__bridge CFDictionaryRef)addquery, NULL);

但这失败了,错误为 -50(无效参数) 我做错了什么?

我想在钥匙串(keychain)中存储一个字符串,如果用户卸载并重新安装我的应用程序可以检索该字符串。

最佳答案

错误是由于 kSecValueRef 而发生的,根据 Apple 的指南 kSecValueRef 接受可以通过 SecKeyRef 生成的加密 key ,请查找下面,

    NSData* tag = [@"com.example.keys.mykey" dataUsingEncoding:NSUTF8StringEncoding];
    NSDictionary* attributes =
    @{ (id)kSecAttrKeyType:               (id)kSecAttrKeyTypeRSA,
       (id)kSecAttrKeySizeInBits:         @2048,
       (id)kSecPrivateKeyAttrs:
           @{ (id)kSecAttrIsPermanent:    @YES,
              (id)kSecAttrApplicationTag: tag,
              },
       };
    CFErrorRef error = NULL;
    SecKeyRef privateKey = SecKeyCreateRandomKey((__bridge CFDictionaryRef)attributes,
                                                 &error);
    SecKeyRef publicKey = SecKeyCopyPublicKey(privateKey);
    NSDictionary* addquery = @{ (id)kSecValueRef: (__bridge id)publicKey,
                                (id)kSecClass: (id)kSecClassKey,
                                (id)kSecAttrApplicationTag: tag,
                                };
    OSStatus status = SecItemAdd((__bridge CFDictionaryRef)addquery, NULL);

更多信息请引用Storing Keys in the Keychain

关于ios - 为什么 SecItemAdd 返回 -50(无效参数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49635716/

相关文章:

ios - 在长按事件上画一个圆圈

ios - 在 iOS 中创建一个整数数组

objective-c - 神秘的内存泄漏 - NSString 自动释放问题

iphone - 如何在 iOS 中实现这一点?

iphone - 如果值大于 10,则使用一个函数处理该值每 10 个,然后使用另一个函数处理该值的其余部分

iphone - 从 iphone 应用程序将视频上​​传到 youtube

iphone - UITableViewCell 和检查点击的问题

ios - 多角色 iOS 应用程序 - 多个角色的逻辑应该在相同还是不同的 View Controller 中?

ios - 从 sizewithFont :constrainedToSize:lineBreakMode: for iOS 7 not behaving as expected 转换

iphone - 是否可以使用同一项目在Xcode 4上生成两个不同的IPA?一个用于iPhone,一个用于iPad?