OSI上的SecItemAdd无法正常工作,在iOS上是

时间:2015-06-24 08:23:13

标签: ios macos key private keychain

我有问题。 我使用Code for iOS为SecItemAdd的Keychain添加私钥。它没有任何错误。 在OS X上具有相同的属性和值,它不起作用。 任何想法,问题是什么。以下是本准则的一部分:

NSData * keyData = ...
NSString * name = @"TestKey"
NSString * keyID = @"TestKey"
const id keys[]     = {
        (__bridge id)(kSecClass),
        (__bridge id)(kSecAttrKeyClass),
        (__bridge id)(kSecAttrLabel),
        (__bridge id)(kSecAttrApplicationLabel),
        (__bridge id)(kSecAttrIsPermanent),
        (__bridge id)(kSecAttrAccessible),
        (__bridge id)(kSecValueData) };
const id values[]   = {
        (__bridge id)(kSecClassKey),
        (__bridge id)(kSecAttrKeyClassPrivate),
        name,
        keyID,
        (id)kCFBooleanTrue,
        (__bridge id)(kSecAttrAccessibleAfterFirstUnlock),
        keyData };
NSMutableDictionary * attributes    = [[NSMutableDictionary alloc] initWithObjects:values forKeys:keys count:ATTR_COUNT(keys)];

CFTypeRef       result;
NSError * error = nil;

OSStatus osStatus = SecItemAdd((__bridge CFDictionaryRef)attributes, &result);

错误是:

  

25303(errKCNoSuchAttr / errSecNoSuchAttr:/该属性不   存在。)。)

2 个答案:

答案 0 :(得分:3)

错误代码指定The attribute does not exist,它归因于属性:kSecAttrKeyClass。尝试删除此属性,并使用标记名称来区分不同的键。我的代码中也遇到了类似的问题。

答案 1 :(得分:0)

您想支持哪个OS X版本? OS X Keychain服务与iOS Keychain Services不同。例如,kSecClass仅在OS X 10.7和kSecAttrAccessible 10.9时可用。