我正在尝试使用此示例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

最佳答案

您正在OS X上尝试iOS示例代码,框架相似但不相同。

您可以通过删除kSecClass键来避免_fastCharacterContents选择器问题,即删除以下代码行,它可以解决崩溃问题,但无法正常工作

[queryPublicKey setObject:(id)kSecClassKey forKey:(id)kSecClass];

请参阅以下Mac OS X示例问题:
Sample code for public key encryption/decryption on Mac?

10-06 11:01