Je stocke une clé privée openssl EVP_PKEY en tant que nsdata. Pour cela, je suis en train de sérialiser dans un flux 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' en tant que NSData en utilisant la ligne ci-dessous
NSData *keydata = [NSData dataWithBytes:P length:len];
Maintenant, je le convertis en NSString en utilisant le code donné ci-dessous, mais lorsque je l'imprime dans la console, cela donne d'autres caractères.
NSString *content =[ NSString stringWithCString:[keydata bytes] encoding:NSUTF8StringEncoding];
Quelqu'un pourrait-il aider?
Fondamentalement, je veux stocker EVP_PKEY dans une base de données sqlite
suis-je sur la bonne voie? Merci.
NSData
àNSString
.Réponses:
Objectif c
Vous pouvez utiliser (voir NSString Class Reference )
Exemple:
Remarque : veuillez noter que la
NSData
valeur doit être valide pour l'encodage spécifié (UTF-8 dans l'exemple ci-dessus), sinonnil
elle sera retournée:Avant Swift 3.0
Swift 3.0 et versions ultérieures
Voir String # init (data: encoding :) Référence
la source
po [[NSString alloc] initWithData:myData encoding:4]
NSData
peut contenir n'importe quelle valeur d'octet, y compris celles en dehors de la plage UTF-8?Avant Swift 3.0:
Pour Swift 4.0:
la source
Je crois que votre "P" est le paramètre dataWithBytes
devrait être "buf"
puisque i2d_PrivateKey place le pointeur vers le tampon de sortie p à la fin du tampon et attend d'autres entrées, et buf pointe toujours vers le début de votre tampon.
Le code suivant fonctionne pour moi où pkey est un pointeur vers un EVP_PKEY:
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 le comparer à la clé privée de votre fichier cert après avoir utilisé la commande suivante et vérification de la sortie de mypkey.pem:
J'ai référencé votre question et ce site de fonction EVP pour ma réponse.
la source
Swift 3:
la source
Un moyen simple de convertir des NSData arbitraires en NSString consiste à l'encoder en base64.
Vous pouvez ensuite le stocker dans votre base de données pour une réutilisation ultérieure. Décodez-le simplement en NSData.
la source
Swift 5 :
la source