2015-06-24 72 views
1

我遇到问题。 我有工作的代码为iOS添加一个私人钥匙到SecItemAdd钥匙串。它工作没有任何错误。 在具有相同属性和值的OS X上,它不起作用。 任何想法,最新问题。下面是部分代码:SecItem在OS X上无法正常工作,在iOS上是

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:/属性不 存在)。)

+0

对于它的价值,我发现在iOS上工作以检索公钥位的SecItemCopyMatching()代码在OSX上不起作用。无论密钥大小如何,它总是返回96个字节。 – user1055568

回答

0

哪个OS X版本你想支持? OS X钥匙串服务与iOS钥匙串服务不同。例如,kSecClass仅适用于OS X 10.7和kSecAttrAccessible 10.9。

1

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

相关问题