127 votes

Convertir NSData en chaîne ?

Je suis le stockage d'un openssl Clé privée EVP_PKEY comme nsdata. Pour cela, je suis de la sérialisation dans un flux d'octets à l'aide du 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. Alors je suis de stocker les octets du tampon " p " comme un NSData à l'aide de la ligne de donnée ci-dessous

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

Maintenant, je suis en la convertissant en une NSString l'aide du code fourni ci-dessous, mais quand je l'imprimer dans sa console en donnant quelques autres personnages.

NSString *content =[ NSString stringWithCString:[keydata bytes] encoding:NSUTF8StringEncoding];

Quelqu'un pourrait-il aider?

Fondamentalement, je veux stocker les EVP_PKEY dans une base de données sqlite

suis-je sur la bonne voie? Merci.

270voto

louiscoquio Points 5395

vous pouvez utiliser (voir la Référence de classe NSString )

Exemple :

Remarque: Veuillez noter le `` valeur doit être valide pour l’encodage spécifié (UTF-8 dans l’exemple ci-dessus)

3voto

aspergillusOryzae Points 329

Je crois que votre "P" comme le dataWithBytes param

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

doit être "buf"

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

depuis i2d_PrivateKey met le pointeur vers le tampon de sortie p à la fin de la mémoire tampon et de l'attente de l'entrée, et buf pointe toujours vers le début de votre tampon.

Le code suivant fonctionne pour moi où pkey est un pointeur vers une 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 binaires en base 64 (http://tomeko.net/online_tools/hex_to_base64.php?lang=en) et de la comparer à la clé privée dans votre fichier cert après aide de la commande suivante et la vérification de la sortie de mypkey.pem:

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X