在OSX中加密和解密数据

时间:2013-04-02 10:43:23

标签: objective-c macos cocoa encryption

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

1 个答案:

答案 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?