2012-06-01 14 views
9

Ora ho un problema con la mia chiave pubblica, ho usato SecKeyGeneratePair per generare pubblico e privato. Ora devo inviare la mia chiave pubblica al server. Ho usato il seguente metodo per convertire SecKeyRef in NSData, ci sono sempre la stessa chiave pubblica. Tuttavia l'ho convertito in formato base64 e l'ho inviato al server. Ma non funziona affatto e il server (Java) inizia a generare errori. Qui è il mio codice iOS:iOS SecKeyRef (Chiave pubblica) inviarlo al server

- (NSData *)getPublicKeyBits { 
    OSStatus sanityCheck = noErr; 
    NSData * publicKeyBits = nil; 

    NSMutableDictionary * queryPublicKey = [[NSMutableDictionary alloc] init]; 

    // Set the public key query dictionary. 
    [queryPublicKey setObject:(id)kSecClassKey forKey:(id)kSecClass]; 
    [queryPublicKey setObject:publicTag forKey:(id)kSecAttrApplicationTag]; 
    [queryPublicKey setObject:(id)kSecAttrKeyTypeRSA forKey:(id)kSecAttrKeyType]; 
    [queryPublicKey setObject:[NSNumber numberWithBool:YES] forKey:(id)kSecReturnData]; 

    // Get the key bits. 
    sanityCheck = SecItemCopyMatching((CFDictionaryRef)queryPublicKey, (CFTypeRef *)&publicKeyBits); 

    if (sanityCheck != noErr) 
    { 
     publicKeyBits = nil; 
    } 

    [queryPublicKey release]; 

    return publicKeyBits; 
} 

uno può aiutare a convertire i SecKeyRef a NSString o NSData.

Grazie in anticipo !!!

-Murali Krishnan

+0

è possibile smarcare questo come un duplicato? Le risposte qui sono perfette per il caso d'uso per l'utilizzo di coppie di chiavi RSA generate da iOS con un server Java, ma la domanda collegata no. – mikeho

risposta

9

Credo che le chiavi generate da iOS mancano alcune informazioni di intestazione che il resto del mondo (Java API nel tuo caso) si aspettano di vedere. Pertanto, affinché Java funzioni con una chiave generata dalle API di sicurezza iOS, è necessario prima di tutto aggiungere queste informazioni di intestazione alla chiave binaria.

Viceversa, affinché le API IOS Sec * per funzionare con una chiave generata dal openssl o ssh-keygen (per esempio), è prima necessario rimuovere queste informazioni di intestazione dalla chiave binario.

In particolare, a iOS non piace l'OID ASN.1 e il resto del mondo lo fa.

veda questo articolo per l'esportazione di una chiave di iOS generati per l'uso da un'applicazione Java - dovrebbe farti andare:

http://blog.wingsofhermes.org/?p=42

+0

Vedi anche [il blog di Chris Luke] (http://blog.flirble.org/2011/01/05/rsa-public-key-openssl-ios/) – bobobobo

+0

Bello, questa risposta aiuta esattamente il caso d'uso che stavo avendo problemi con. – mikeho

Problemi correlati