tiene tecnologia cuenta conexion con and iphone ios sqlite openssl nsdata

iphone - tecnologia - ¿Convertir NSData en Cadena?



iphone and nfc (5)

Creo que su "P" como datos con Byy param

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

debería ser "buf"

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

ya que i2d_PrivateKey coloca el puntero en el 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:

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);

Puede usar un convertidor en línea para convertir sus datos binarios en la 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 verificando la salida de mypkey.pem:

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

Hice referencia a su pregunta y a este sitio de la función EVP por mi respuesta.

Estoy almacenando una clave privada de openss EVP_PKEY como nsdata. Para esto estoy serializando en una secuencia 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 del tipo EVP_PKEY. Luego, estoy almacenando los bytes del buffer ''p'' como un NSData usando la línea dada a continuación

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

Ahora lo estoy convirtiendo a un NSString usando el código que se muestra a continuación, pero cuando lo imprimo en la consola da 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.


Prior Swift 3.0:

String(data: yourData, encoding: NSUTF8StringEncoding)

Para Swift 3.0:

String(data: yourData, encoding: .utf8)


Rápido:

String(data: data!, encoding: NSUTF8StringEncoding)


Swift 3:

String(data: data, encoding: .utf8)


C objetivo

Puede usar (vea la referencia de la clase NSString )

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

Ejemplo:

NSString *myString = [[NSString alloc] initWithData:myData encoding:NSUTF8StringEncoding];

Observación : Tenga en cuenta que el valor de NSData debe ser válido para la codificación especificada (UTF-8 en el ejemplo anterior), de lo contrario se devolverá nil :

Devuelve nil si la inicialización falla por algún motivo (por ejemplo, si los datos no representan datos válidos para la codificación).

Antes Swift 3.0

String(data: yourData, encoding: NSUTF8StringEncoding)

Swift 3.0

String(data: yourData, encoding: .utf8)

Ver String # init (data: encoding :) Referencia