iPhoneアプリをシステムと統合する必要があり、特定の公開鍵でデータを暗号化する必要があります。3つの異なる形式の.xml .derと.pemの3つのファイルがあります。調査して、SecKeyRefの取得に関する記事をいくつか見つけました。 DER / PEMですが、常にnilを返します。以下は私のコードです:
NSString *pkFilePath = [[NSBundle mainBundle] pathForResource:@"PKFile" ofType:@"der"];
NSData *pkData = [NSData dataWithContentsOfFile:pkFilePath];
SecCertificateRef cert;
cert = SecCertificateCreateWithData(NULL, (CFDataRef) pkData);
assert(cert != NULL);
OSStatus err;
if (cert != NULL) {
err = SecItemAdd(
(CFDictionaryRef) [NSDictionary dictionaryWithObjectsAndKeys:
(id) kSecClassCertificate, kSecClass,
(id) cert, kSecValueRef,
nil
],
NULL
);
if ( (err == errSecSuccess) || (err == errSecDuplicateItem) ) {
CFArrayRef certs = CFArrayCreate(kCFAllocatorDefault, (const void **) &cert, 1, NULL);
SecPolicyRef policy = SecPolicyCreateBasicX509();
SecTrustRef trust;
SecTrustCreateWithCertificates(certs, policy, &trust);
SecTrustResultType trustResult;
SecTrustEvaluate(trust, &trustResult);
if (certs) {
CFRelease(certs);
}
if (trust) {
CFRelease(trust);
}
return SecTrustCopyPublicKey(trust);
}
}
return NULL;
SecCertificateCreateWithDataで問題が発生し、ファイルの読み取りに問題がない場合でも常にnilが返されます。誰かがこれをやったことがあります、私を助けてください、ありがとう!
編集:証明書ファイルはMD5署名でした。