Ich speichere einen openssl privaten Schlüssel EVP_PKEY als nsdata. Dafür serialisiere ich mit dem folgenden Code in einen Byte-Stream
unsigned char *buf, *p;
int len;
len = i2d_PrivateKey(pkey, NULL);
buf = OPENSSL_malloc(len);
p = buf;
i2d_PrivateKey(pkey, &p);
Dabei ist pkey vom Typ EVP_PKEY. Dann speichere ich die Bytes aus dem Puffer 'p' als NSData unter Verwendung der unten angegebenen Zeile
NSData *keydata = [NSData dataWithBytes:P length:len];
Jetzt konvertiere ich es mit dem unten angegebenen Code in einen NSString, aber wenn ich es in die Konsole drucke, gibt es einige andere Zeichen.
NSString *content =[ NSString stringWithCString:[keydata bytes] encoding:NSUTF8StringEncoding];
Könnte jemand helfen?
Grundsätzlich möchte ich EVP_PKEY in einer SQLite-Datenbank speichern
bin ich auf dem richtigen Weg? Vielen Dank.
NSData
zuNSString
.Antworten:
Ziel c
Sie können verwenden (siehe NSString-Klassenreferenz )
Beispiel:
Anmerkung : Bitte beachten Sie, dass der
NSData
Wert für die angegebene Codierung gültig sein muss (UTF-8 im obigen Beispiel), andernfallsnil
wird Folgendes zurückgegeben:Prior Swift 3.0
Swift 3.0 ab
Siehe String # init (Daten: Codierung :) Referenz
quelle
po [[NSString alloc] initWithData:myData encoding:4]
NSData
sie einen beliebigen Bytewert enthalten kann, einschließlich solcher außerhalb des UTF-8-Bereichs?Prior Swift 3.0:
Für Swift 4.0:
quelle
Ich glaube, Ihr "P" als dataWithBytes-Parameter
sollte "buf" sein
da i2d_PrivateKey den Zeiger auf den Ausgabepuffer p am Ende des Puffers setzt und auf weitere Eingaben wartet und buf immer noch auf den Anfang Ihres Puffers zeigt.
Der folgende Code funktioniert für mich, wenn pkey ein Zeiger auf einen EVP_PKEY ist:
Sie können einen Online-Konverter verwenden, um Ihre Binärdaten in Base 64 ( http://tomeko.net/online_tools/hex_to_base64.php?lang=de ) zu konvertieren und mit dem privaten Schlüssel in Ihrer Zertifikatdatei zu vergleichen, nachdem Sie den folgenden Befehl und verwendet haben Überprüfen der Ausgabe von mypkey.pem:
Ich habe Ihre Frage und diese EVP-Funktionsseite für meine Antwort referenziert .
quelle
Swift 3:
quelle
Eine einfache Möglichkeit, beliebige NSData in NSString zu konvertieren, besteht darin, sie mit base64 zu codieren.
Sie können es dann zur späteren Wiederverwendung in Ihrer Datenbank speichern. Dekodieren Sie es einfach zurück in NSData.
quelle
Swift 5 :
quelle