我正在尝试使用此示例https://developer.apple.com/library/mac/documentation/security/conceptual/CertKeyTrustProgGuide/iPhone_Tasks/iPhone_Tasks.html#//apple_ref/doc/uid/TP40001358-CH208-SW9来创建公钥/私钥,并在加密一些数据之后。
SecKeyRef publicKey = NULL; // 3
NSData * publicTag = [NSData dataWithBytes:publicKeyIdentifier length:strlen((const char *)publicKeyIdentifier)]; // 4 NSMutableDictionary *queryPublicKey = [[NSMutableDictionary alloc] init]; // 5 [queryPublicKey setObject:(id)kSecClassKey forKey:(id)kSecClass]; [queryPublicKey setObject:publicTag forKey:(id)kSecAttrApplicationTag]; [queryPublicKey setObject:(id)kSecAttrKeyTypeRSA forKey:(id)kSecAttrKeyType]; [queryPublicKey setObject:[NSNumber numberWithBool:YES] forKey:(id)kSecReturnRef]; // 6 status = SecItemCopyMatching ((CFDictionaryRef)queryPublicKey, (CFTypeRef *)&publicKey); // 7
在iOS上运行正常。
在OSX中,当我调用SecItemCopyMatching(7)时,我得到了这个。它是Apple提供的样本。我不知道出了什么问题,在OSX上查询的某些属性是否需要不同?
由于
[NSConcreteData _fastCharacterContents]:发送到的无法识别的选择器 实例0x1005440f0
答案 0 :(得分:1)
您正在OS X上尝试iOS示例代码,框架类似但不完全相同。
您可以通过删除kSecClass键来避免_fastCharacterContents选择器问题,即删除以下代码行,它可以修复崩溃问题但无法正常工作
[queryPublicKey setObject:(id)kSecClassKey forKey:(id)kSecClass];
对于Mac OS X示例,请参阅此问题: Sample code for public key encryption/decryption on Mac?