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