2011-02-16 4 views
3

Je dois crypter une chaîne et avoir un .CER (x.509) dans le dossier Ressources de mon projet xCode. Les deux derniers jours que j'ai passés à imaginer comment, mais pas de succès, il est donc temps de demander.Cryptage iPhone avec certificat

La documentation d'Apple est très difficile à lire ... et je vois que ce framework est probablement le plus difficile à comprendre ... ni les samples n'ont aidé.

Alors, je l'ai essayé avec le code suivant: De toute évidence, il ne fonctionne pas:

Sur mon Mac je OPENSSL mais j'ai trouvé aucun moyen de recréer OPENSSL commandes dans le SDK. Donc, je suis assez confus ... n'importe qui ???

Merci beaucoup :)

NSString *certPath = [[NSBundle mainBundle] pathForResource:@"Certificate" ofType:@"cer"]; 
    SecCertificateRef myCertificate = nil; 

    NSData *certificateData = [[NSData alloc] initWithContentsOfFile:certPath]; 
    myCertificate = SecCertificateCreateWithData(kCFAllocatorDefault, (CFDataRef)certificateData); 

    SecPolicyRef myPolicy = SecPolicyCreateBasicX509(); 
    SecTrustRef myTrust; 
    SecTrustCreateWithCertificates(myCertificate, myPolicy, &myTrust); 
    SecKeyRef publicKey = SecTrustCopyPublicKey(myTrust); 



     uint8_t *pPlainText = (uint8_t*)"This is a test"; 
     uint8_t aCipherText[1024]; 
     size_t iCipherLength = 1024; 
     OSStatus status = SecKeyEncrypt(publicKey, 
             kSecPaddingPKCS1, 
             pPlainText, 
             strlen((char*)pPlainText) + 1, 
             aCipherText, 
             &iCipherLength); 


     } 
+0

Avez-vous trouvé des solutions à ce @Fabio – Dilshan

Répondre

2

J'ai essayé votre code mis à jour avec l'ajout de deux lignes à la fin:

NSData *cipherData = [NSData dataWithBytes:aCipherText length:iCipherLength]; 
NSLog(@"(%d) %@", status, cipherData); 

Cela fonctionne très bien:

2011-02-17 22:24:04.204 Untitled[45121:207] (0) <87a2eb07 25ab693a 7fe88329 974b6820 
843c5c33 8c5d4606 aecea682 0176e4cb 10482c9b fd2e2242 1c77d349 d3037e91 8d704783 
f2e04c82 ef273815 bdb6aa73 f8646542 243f3e12 518147ba 53636441 fd9399d3 b198ed6a 
615d51d1 4105fb75 27180f0d 09835551 5162e156 33dedf39 a87e17f8 16881990 c5e57a38 
7cd7ec63> 

maintenant Une différence est que la clé publique que j'utilise est dans mon trousseau. Si ce n'est pas le cas, vous pouvez regarder le lien import-an-ssl-cert-under-the-iphone-sdk ci-dessous. Jusqu'à présent, j'ai seulement testé sur simulateur, qui peut également être différent, mais je crois que c'est correct.

Si vous avez toujours des problèmes, assurez-vous de vérifier le résultat de chaque appel (et s'il renvoie OSStatus, vérifiez-le). Quel morceau est défaillant?


Vous avez oublié d'appeler SecTrustEvaluate() sur votre SecTrustRef avant d'appeler SecTrustCopyPublicKey(). Vérifiez les documents sur SecTrustCopyPublicKey() qui explique cela.


informations Vieux qui n'a pas été aussi utile:

Je crois que ces postes devraient vous orienter dans la bonne direction:

http://greghaygood.com/2009/01/17/asymmetric-encryption-with-the-iphone-sdk-and-securityframework

Importing an SSL cert under the iPhone SDK

Notez également que si vous avez déjà le code OpenSSL pour Mac, vous pouvez compiler OpenSSL pour iphone. Ce poste a été utile pour moi quand j'ai développé mes scripts: construire

http://www.therareair.com/2009/01/01/tutorial-how-to-compile-openssl-for-the-iphone/

+0

Merci :) Je les ai déjà donné un essai ... il est vraiment beaucoup d'heures et je pense avoir lu tout ce qui est possible. Pourriez-vous (ou quelqu'un) me dire ce qui me manque dans mon code? Je pense que ça doit être vrai! Je voudrais juste avoir un journal de la chaîne cryptée ... – Fabio

+0

Quelqu'un? :(Je ne suis pas vraiment habitué à demander des échantillons, mais c'est la situation où les docs Apple sucent et personne n'a jamais posté un échantillon ... :(Vraiment frustré ... – Fabio

+0

J'ai mis à jour la réponse à votre question –