Convertir NSData en string?

Je stocke une key privée openssl EVP_PKEY comme nsdata. Pour cela, je suis en train de sérialiser dans un stream d'octets en utilisant le code ci-dessous

unsigned char *buf, *p; int len; len = i2d_PrivateKey(pkey, NULL); buf = OPENSSL_malloc(len); p = buf; i2d_PrivateKey(pkey, &p); 

où pkey est de type EVP_PKEY. Ensuite, je stocke les octets du tampon 'p' comme un NSData en utilisant la ligne ci-dessous

 NSData *keydata = [NSData dataWithBytes:P length:len]; 

Maintenant je le convertis en NSSsortingng en utilisant le code donné ci-dessous mais quand je l'imprime dans la console il donne d'autres caractères.

 NSSsortingng *content =[ NSSsortingng ssortingngWithCSsortingng:[keydata bytes] encoding:NSUTF8SsortingngEncoding]; 

Quelqu'un pourrait-il aider?

Fondamentalement, je veux stocker le EVP_PKEY dans une database sqlite

suis-je sur la bonne voie? Merci.

Objectif c

Vous pouvez utiliser (voir Référence de la class NSSsortingng )

 - (id)initWithData:(NSData *)data encoding:(NSSsortingngEncoding)encoding 

Exemple :

 NSSsortingng *mySsortingng = [[NSSsortingng alloc] initWithData:myData encoding:NSUTF8SsortingngEncoding]; 

Remarque : Veuillez noter que la valeur NSData doit être valide pour l'enencoding spécifié (UTF-8 dans l'exemple ci-dessus), sinon nil ne sera returnné:

Renvoie zéro si l'initialisation échoue pour une raison quelconque (par exemple si datatables ne représentent pas des données valides pour le encoding).

Prior Swift 3.0

 Ssortingng(data: yourData, encoding: NSUTF8SsortingngEncoding) 

Swift 3.0

 Ssortingng(data: yourData, encoding: .utf8) 

Voir Ssortingng # init (data: encoding 🙂 Référence

Prior Swift 3.0:

 Ssortingng(data: yourData, encoding: NSUTF8SsortingngEncoding) 

Pour Swift 3.0:

 Ssortingng(data: yourData, encoding: .utf8) 

Je crois que votre "P" en tant que param dataWithBytes

 NSData *keydata = [NSData dataWithBytes:P length:len]; 

devrait être "buf"

 NSData *keydata = [NSData dataWithBytes:buf length:len]; 

puisque i2d_PrivateKey place le pointeur sur le tampon de sortie p à la fin du tampon et attend une autre input, et buf pointe toujours vers le début de votre tampon.

Le code suivant fonctionne pour moi où pkey est un pointeur sur un EVP_PKEY:

 unsigned char *buf, *pp; int len = i2d_PrivateKey(pkey, NULL); buf = OPENSSL_malloc(len); pp = buf; i2d_PrivateKey(pkey, &pp); NSData* pkeyData = [NSData dataWithBytes:(const void *)buf length:len]; DLog(@"Private key in hex (%d): %@", len, pkeyData); 

Vous pouvez utiliser un convertisseur en ligne pour convertir vos données binarys en base 64 ( http://tomeko.net/online_tools/hex_to_base64.php?lang=fr ) et le comparer à la key privée dans votre file CERT après avoir utilisé la command suivante et vérifier la sortie de mypkey.pem:

 openssl pkcs12 -in myCert.p12 -nocerts -nodes -out mypkey.pem 

J'ai référencé votre question et ce site de fonction EVP pour ma réponse.

Swift 3:

 Ssortingng(data: data, encoding: .utf8) 

Rapide:

 Ssortingng(data: data!, encoding: NSUTF8SsortingngEncoding)