iOS SecItemAdd 返回-34018

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言: 我们讲解了初级的对称加密,我想信大家也对加密以及为什么要加密有了一定的理解,但是对称加密有一个很大的缺点就...
    退役程序猿阅读 3,293评论 6 10
  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一种新的协议。它实...
    香橙柚子阅读 24,611评论 8 183
  • 生死本是一件再正常不过的事,你看此花,今日正值怒放,明日便会于寒风凛冽中凋谢。而人亦是如此,你不知道明天和意外哪个...
    宸琰阅读 414评论 0 0
  • 兔兔马阅读 289评论 7 3
  • 【晨读感悟】 1、我们在支持和反对的群体中往往能发现问题,反对者有其自身的原因,从中我们可以从反对者那里找到自己问...
    faye26阅读 244评论 2 0

友情链接更多精彩内容