ho una chiave pubblica Base64 che è stato generato da Java utilizzando questo codice:lettura PEM chiave pubblica in iOS
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);
Questo si traduce in una stringa Base64.
In OSX posso ottenere un SecKeyRef utilizzando questo codice:
// 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);
Tuttavia in iOS non esiste un metodo SecKeyCreateFromData
.
posso utilizzare la stringa Base64 in iOS utilizzando this code che aggiunge al portachiavi, poi recupera di nuovo come un SecKeyRef
tuttavia Preferirei mille volte non è necessario aggiungere il CERT al portachiavi solo per essere in grado di recuperarla usarlo una volta.
Facendo qualche ricerca, sembra che dovrei essere in grado di utilizzare SecCertificateCreateWithData
per creare un certificato da utilizzare in iOS dalla stringa Base64 che ho, ma ho sempre tornare un CERT NULL quando si utilizza questo codice:
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);
}
}
hai visto questo [articolo] (http://ios-blog.co.uk/tutorials/quick-tips/quick-tip-how-to-get-seckeyref-from-base64-coded-string/)? – Gannic
Sì, è da lì che ho ricevuto il codice sopra, ma SecCertificateRef è sempre NULL. – Darren
Non vuoi ottenere un 'SecKeyRef' piuttosto che un' SecCertificateRef'? 'SecCertificateCreateWithData' richiede che i dati siano 'A DER (Distinguished Encoding Rules) rappresentazione di un certificato X.509' – Joshua