Estoy almacenando una clave privada EVP_PKEY de openssl como nsdata. Para esto, estoy serializando en un flujo de bytes usando el siguiente código
unsigned char *buf, *p;
int len;
len = i2d_PrivateKey(pkey, NULL);
buf = OPENSSL_malloc(len);
p = buf;
i2d_PrivateKey(pkey, &p);
donde pkey es de tipo EVP_PKEY. Luego estoy almacenando los bytes del búfer 'p' como NSData usando la línea que se muestra a continuación
NSData *keydata = [NSData dataWithBytes:P length:len];
Ahora lo estoy convirtiendo en un NSString usando el código que se proporciona a continuación, pero cuando lo imprimo en la consola, me da algunos otros caracteres.
NSString *content =[ NSString stringWithCString:[keydata bytes] encoding:NSUTF8StringEncoding];
¿Alguien podría ayudar?
Básicamente, quiero almacenar EVP_PKEY en una base de datos sqlite
estoy en el camino correcto? Gracias.
NSData
formatoNSString
.Respuestas:
C objetivo
Puede usar (consulte Referencia de clase NSString )
Ejemplo:
Observación :
NSData
tenga en cuenta que el valor debe ser válido para la codificación especificada (UTF-8 en el ejemplo anterior); de lo contrarionil
, se devolverá:Prior Swift 3.0
Swift 3.0 en adelante
Consulte String # init (datos: codificación :) Referencia
fuente
po [[NSString alloc] initWithData:myData encoding:4]
NSData
puede contener cualquier valor de byte, incluidos los que están fuera del rango UTF-8?Swift 3.0 anterior:
Para Swift 4.0:
fuente
Creo que su "P" es el parámetro dataWithBytes
debería ser "buf"
ya que i2d_PrivateKey pone el puntero al búfer de salida p al final del búfer y espera más entradas, y buf sigue apuntando al principio de su búfer.
El siguiente código funciona para mí, donde pkey es un puntero a EVP_PKEY:
Puede usar un convertidor en línea para convertir sus datos binarios en base 64 ( http://tomeko.net/online_tools/hex_to_base64.php?lang=en ) y compararlo con la clave privada en su archivo cert después de usar el siguiente comando y comprobando la salida de mypkey.pem:
Hice referencia a su pregunta y a este sitio de funciones EVP para obtener mi respuesta.
fuente
Swift 3:
fuente
Una forma sencilla de convertir NSData arbitrario a NSString es codificarlo en base64.
Luego, puede almacenarlo en su base de datos para reutilizarlo más tarde. Simplemente decodifíquelo de nuevo a NSData.
fuente
Rápido 5 :
fuente