Я попробовал ваш обновленный код с добавлением двух строк в конце:
NSData *cipherData = [NSData dataWithBytes:aCipherText length:iCipherLength];
NSLog(@"(%d) %@", status, cipherData);
Это прекрасно работает:
2011-02-17 22:24:04.204 Untitled[45121:207] (0) <87a2eb07 25ab693a 7fe88329 974b6820
843c5c33 8c5d4606 aecea682 0176e4cb 10482c9b fd2e2242 1c77d349 d3037e91 8d704783
f2e04c82 ef273815 bdb6aa73 f8646542 243f3e12 518147ba 53636441 fd9399d3 b198ed6a
615d51d1 4105fb75 27180f0d 09835551 5162e156 33dedf39 a87e17f8 16881990 c5e57a38
7cd7ec63>
Теперь одно отличие состоит в том, что открытый ключ, который я использую, находится в моей цепочке для ключей. Если у вас нет, вы можете взглянуть на ссылку importing-an-ssl-cert-under-i-iphone-sdk ниже. До сих пор я тестировал только на симуляторе, который также может отличаться, но я считаю, что это правильно.
Если проблема не устранена, обязательно проверяйте результат каждого вызова (и, если он возвращает OSStatus, проверьте это). Какой кусок терпит неудачу?
Вы забыли позвонить SecTrustEvaluate()
на SecTrustRef
, прежде чем позвонить SecTrustCopyPublicKey()
. Проверьте документы на SecTrustCopyPublicKey()
, что объясняет это.
Старая информация, которая была не такой полезной:
Я считаю, что эти сообщения должны указывать вам правильное направление:
http://greghaygood.com/2009/01/17/asymmetric-encryption-with-the-iphone-sdk-and-securityframework
Импорт сертификата SSL под iPhone SDK
Также обратите внимание, что если у вас уже есть код OpenSSL для Mac, вы можете скомпилировать OpenSSL для iPhone. Этот пост был полезен для меня при разработке сценариев сборки:
http://www.therareair.com/2009/01/01/tutorial-how-to-compile-openssl-for-the-iphone/