まず、NSStringをNSDataにbase64でデコードする必要があります。 ソリューションについてはthis answerを参照してください。 iOS 7用に開発する場合は、initWithBase64EncodedString::options
を使用できます。
文字列をNSDataとして復号化したら、そこから証明書を作成できます。受け取った証明書の形式は重要です.DER(これは共通)またはPKCS12を使用できます。あなたはDERとしてそれを得ている可能性が高いので、私はあなたがガイダンスを必要としていると仮定します。 cerificateデータはSecCertificateCreateWithData
に渡されたときに、NULLの結果を取得します間違った形式にあった場合
SecCertificateRef cert = NULL;
SecPolicyRef policy = NULL;
cert = SecCertificateCreateWithData(kCFAllocatorDefault, data);
policy = SecPolicyCreateBasicX509();
:
は、証明書とポリシーを作成します。
この時点では証明書はありますが、公開鍵はありません。公開鍵を取得するには、証明書のcreate a trust reference and evaluate the trustが必要です。
OSStatus status = noErr;
SecKeyRef *publicKey = NULL;
SecTrustRef trust = NULL;
SecTrustResultType trustType = kSecTrustResultInvalid;
if (cert != NULL){
SecCertificateRef certArray[1] = {cert};
certs = CFArrayCreate(kCFAllocatorDefault, (void *)certArray, 1, NULL);
status = SecTrustCreateWithCertificates(certs, policy, &trust);
if (status == errSecSuccess){
status = SecTrustEvaluate(trust, &trustType);
// Evaulate the trust.
switch (trustType) {
case kSecTrustResultInvalid:
case kSecTrustResultConfirm:
case kSecTrustResultDeny:
case kSecTrustResultUnspecified:
case kSecTrustResultFatalTrustFailure:
case kSecTrustResultOtherError:
break;
case kSecTrustResultRecoverableTrustFailure:
*publicKey = SecTrustCopyPublicKey(trust);
break;
case kSecTrustResultProceed:
*publicKey = SecTrustCopyPublicKey(trust);
break;
}
}
}
すべてがうまくいったら、公開鍵を使って入力済みのSecKeyRefを取得する必要があります。うまくいかなかった場合、NULL SecKeyRefと何が問題になったのかを示すOSStatusが表示されます。セキュリティフレームワークのSecBase.h
には、これらのエラーコードに関する詳細情報が記載されています。
公開キーを持つSecKeyRefがあるので、それを使って対応する秘密鍵でデータを暗号化すると、programming guideでよくカバーされます。
ARCまたはCFReleaseを使用して、上記で割り当てたもの(ポリシー、証明書)をリリースする必要があることに注意してください。
これを行うには、['SecItemAdd'、' 'SecItemCopyMatching'](https://developer.apple.com/library/ios/#documentation/security/conceptual/keychainServConcepts/iPhoneTasks/iPhoneTasks.html)が必要な場合があります。 – bobobobo
[関連項目](http://blog.flirble.org/2011/01/05/rsa-public-key-openssl-ios/) – bobobobo
あなたの質問に答えたことはありますか? – Devarshi