美文网首页
iOS SecItemAdd 返回-34018

iOS SecItemAdd 返回-34018

作者: Jixin | 来源:发表于2016-11-28 16:47 被阅读1062次

Keywords: RSA encrypt, keychain , SecItemAdd, -34018

一、问题

升级了iOS 10和Xcode 8后RSA加密的时候调用SecItemAdd方法的时候总是得到 -34018。

代码如下:

    //a tag to read/write keychain storage
    NSString *tag = @"RSAUtil_PubKey";
    NSData *d_tag = [NSData dataWithBytes:[tag UTF8String] length:[tag length]];
    
    // Delete any old lingering key with the same tag
    NSMutableDictionary *publicKey = [[NSMutableDictionary alloc] init];
    [publicKey setObject:(__bridge id) kSecClassKey forKey:(__bridge id)kSecClass];
    [publicKey setObject:(__bridge id) kSecAttrKeyTypeRSA forKey:(__bridge id)kSecAttrKeyType];
    [publicKey setObject:d_tag forKey:(__bridge id)kSecAttrApplicationTag];
    SecItemDelete((__bridge CFDictionaryRef)publicKey);
    
    // Add persistent version of the key to system keychain
    [publicKey setObject:data forKey:(__bridge id)kSecValueData];
    [publicKey setObject:(__bridge id) kSecAttrKeyClassPublic forKey:(__bridge id)
     kSecAttrKeyClass];
    [publicKey setObject:[NSNumber numberWithBool:YES] forKey:(__bridge id)
     kSecReturnPersistentRef];
    
    CFTypeRef persistKey = nil;
    OSStatus status = SecItemAdd((__bridge CFDictionaryRef)publicKey, &persistKey);
    if (persistKey != nil){
        CFRelease(persistKey);
    }

执行到OSStatus status = SecItemAdd((__bridge CFDictionaryRef)publicKey, &persistKey);时,status = -34018,而正常情况下status = 0。

显然是publicKey没有成功的添加到KeyChain中。

二、解决方案
1.打开KeyChain Sharing

keychain.png

相关文章

网友评论

      本文标题:iOS SecItemAdd 返回-34018

      本文链接:https://www.haomeiwen.com/subject/hixryttx.html