首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SecItemCopyMatching时,SecKeyRef导致EXC_BAD_ACCESS (code=1)错误

使用SecItemCopyMatching时,SecKeyRef导致EXC_BAD_ACCESS (code=1)错误
EN

Stack Overflow用户
提问于 2015-02-15 10:55:43
回答 1查看 807关注 0票数 3

我是iOS上的加密新手,我遇到了一个错误,我一直无法找到解决方案:

每当我尝试获取iOS密钥链中公钥的SecKeyRef并使用它时,我都会得到一个EXC_BAD_ACCESS错误。在下面的代码中,SecKeyRef (称为"publicKeyReference“)最初设置为NULL,但在调用SecItemCopyMatching方法之后,它应该有一个值,这可以从调试器窗口中的内存地址中看到。

下面是我的代码:

代码语言:javascript
复制
SecKeyRef publicKeyReference = NULL;
NSData* publicTag = [publicKeyIdentifier dataUsingEncoding:NSUTF8StringEncoding];


NSMutableDictionary *queryPublicKey = [[NSMutableDictionary alloc] init];

// Set the public key query dictionary.
[queryPublicKey setObject:(__bridge id)kSecClassKey forKey:(__bridge id)kSecClass];
[queryPublicKey setObject:publicTag forKey:(__bridge id)kSecAttrApplicationTag];
[queryPublicKey setObject:(__bridge id)kSecAttrKeyTypeRSA forKey:(__bridge id)kSecAttrKeyType];
[queryPublicKey setObject:[NSNumber numberWithBool:YES] forKey:(__bridge id)kSecReturnPersistentRef];

// Get the key.
sanityCheck = SecItemCopyMatching((__bridge CFDictionaryRef)queryPublicKey, (CFTypeRef *)&publicKeyReference);

// Encrypt using the public.
sanityCheck = SecKeyEncrypt(    publicKeyReference,
                       PADDING,
                       plainBuffer,
                       plainBufferSize,
                       &cipherBuffer[0],
                       &cipherBufferSize
                       );        

下面是错误和调试窗口的一些屏幕截图:

因为地址的值不是"0x0",所以似乎有一些东西被分配给了SecKeyRef,但是无论我尝试了什么,我都不断地得到EXC_BAD_ACCESS错误。在这个问题上,我们非常感谢所有的帮助。

EN

回答 1

Stack Overflow用户

发布于 2019-10-05 18:34:10

我用SecKeyCreateEncryptedData函数得到了同样的错误(它的目的是在iOS 10+上替换SecKeyEncrypt的用法),它不是由SecKeyRef引起的,而是由加密数据的CFDataRef引起的。因此,我建议检查加密的数据,如plainBufferplainBufferSize等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28522578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档