我正在开发一个带有java服务器的iOS应用程序。我需要使用 RSA 加密一些数据。RSA 公钥是一个 txt 文件。我想把它整合成一个SecKeyRef。服务器是由前一个家伙开发的。我无权对服务器执行任何操作。
NSData *keyBytes = [[NSData alloc] initWithBase64EncodedString:SERVER_PUBLIC_KEY options:0];
SecCertificateRef mycertificate = SecCertificateCreateWithData(NULL, (__bridge CFDataRef) keyBytes);
SecPolicyRef myPolicy = SecPolicyCreateBasicX509();
SecTrustRef myTrust;
if (mycertificate != NULL){
OSStatus status = SecTrustCreateWithCertificates(mycertificate, myPolicy, &myTrust);
SecTrustResultType trustResult;
if(status == noErr) {
status = SecTrustEvaluate(myTrust, &trustResult);
}
CFRelease(mycertificate);
CFRelease(myPolicy);
CFRelease(myTrust);
} else {
NSLog(@"Hell no!");
}
return SecTrustCopyPublicKey(myTrust);
问题是 SecCertificateRef 始终为空。当我运行上面的代码时,应用程序崩溃了!
将证书从文本格式 PEM(隐私增强邮件,一种用于加密对象的文本格式(转换为二进制格式 DER。基本上PEM是一个页眉,页脚,一些选项(不用于证书(和中间的base 64编码的DER。
由于我没有找到任何在iOS中执行此操作的直接示例,因此将证书从.txt
转换为.bin
,.der
或.cer
可能是最简单的方法。例如,您可以使用openssl
来执行此操作:
openssl x509 -in cert.txt -outform der -out cert.der
然后尝试使用问题中的代码阅读它。