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
:
Antes Swift 3.0
String(data: yourData, encoding: NSUTF8StringEncoding)
Swift 3.0
String(data: yourData, encoding: .utf8)