У меня есть base64 открытый ключ, который был создан с помощью Java, используя этот код:Чтение PEM открытый ключ в прошивкой
RSAPublicKeySpec rsaKS = new RSAPublicKeySpec(modulus, pubExponent);
RSAPublicKey rsaPubKey = (RSAPublicKey) kf.generatePublic(rsaKS);
byte[] encoded = rsaPubKey.getEncoded();
String base64 = Base64.encodeToString(encoded, Base64.DEFAULT);
Log.e(null, "base64: " + base64);
Это приводит строку Base64.
В OSX я могу получить SecKeyRef, используя этот код:
// Create the SecKeyRef using the key data
CFErrorRef error = NULL;
CFMutableDictionaryRef parameters = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, NULL, NULL);
CFDictionarySetValue(parameters, kSecAttrKeyType, kSecAttrKeyTypeRSA);
CFDictionarySetValue(parameters, kSecAttrKeyClass, kSecAttrKeyClassPublic);
SecKeyRef keyRef = SecKeyCreateFromData(parameters, (__bridge CFDataRef)[pubKey base64DecodedData], &error);
Однако в прошивке нет SecKeyCreateFromData
метода.
Я могу использовать строку Base64 в прошивкой с помощью this code, который добавляет его к связке ключей, а затем возвращает его снова как SecKeyRef
однако я бы предпочел не иметь, чтобы добавить сертификат в брелка просто чтобы быть в состоянии восстановить его использовать его один раз.
Выполнения некоторых исследований, кажется, я должен быть в состоянии использовать SecCertificateCreateWithData
создать сертификат для использования в прошивке из строки Base64 у меня есть, но я всегда получаю обратно NULL сертификат при использовании этого кода:
NSString* pespublicKey = @"MIGfMA0GCSqGSIb3....DCUdz/y4B2sf+q5n+QIDAQAB";
NSData* certData = [pespublicKey dataUsingEncoding:NSUTF8StringEncoding];
SecCertificateRef cert;
if ([certData length]) {
cert = SecCertificateCreateWithData(kCFAllocatorDefault, (__bridge CFDataRef)certData);
if (cert != NULL) {
CFStringRef certSummary = SecCertificateCopySubjectSummary(cert);
NSString* summaryString = [[NSString alloc] initWithString:(__bridge NSString*)certSummary];
NSLog(@"CERT SUMMARY: %@", summaryString);
CFRelease(certSummary);
} else {
NSLog(@" *** ERROR *** trying to create the SSL certificate from data located at %@, but failed", pespublicKey);
}
}
Вы видели это [статья] (http://ios-blog.co.uk/tutorials/quick-tips/quick-tip-how-to-get-seckeyref-from-base64-coded-string/)? – Gannic
Да, вот где я получил код выше, но SecCertificateRef всегда имеет значение NULL. – Darren
Вы не хотите получать 'SecKeyRef', а не' SecCertificateRef'? 'SecCertificateCreateWithData' требует, чтобы данные были« A DER (Distinguished Rules Encoding Rules) »в сертификате X.509« – Joshua