1

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

4

1 回答 1

1

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

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

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

请参阅 Mac OS X 示例的此问题:Mac 上公钥加密/解密的示例代码?

于 2013-04-02T13:51:06.713 回答