Estou armazenando uma chave privada openssl EVP_PKEY como nsdata. Para isso, estou serializando em um fluxo de bytes usando o código abaixo
unsigned char *buf, *p;
int len;
len = i2d_PrivateKey(pkey, NULL);
buf = OPENSSL_malloc(len);
p = buf;
i2d_PrivateKey(pkey, &p);
onde pkey é do tipo EVP_PKEY. Então, estou armazenando os bytes do buffer 'p' como um NSData usando a linha fornecida abaixo
NSData *keydata = [NSData dataWithBytes:P length:len];
Agora estou convertendo-o para um NSString usando o código fornecido abaixo, mas quando imprimo no console está dando alguns outros caracteres.
NSString *content =[ NSString stringWithCString:[keydata bytes] encoding:NSUTF8StringEncoding];
Alguém poderia ajudar?
Basicamente, eu quero armazenar o EVP_PKEY em um banco de dados sqlite
Estou no caminho certo? Obrigado.
NSData
aNSString
.Respostas:
Objetivo-C
Você pode usar (consulte a Referência de classe NSString )
Exemplo:
Observação : observe que o
NSData
valor deve ser válido para a codificação especificada (UTF-8 no exemplo acima), caso contrário,nil
será retornado:Prior Swift 3.0
Swift 3.0 em diante
Consulte String # init (data: encoding :) Referência
fonte
po [[NSString alloc] initWithData:myData encoding:4]
NSData
possam conter algum valor de byte, incluindo aqueles fora do intervalo UTF-8?Swift anterior 3.0:
Para o Swift 4.0:
fonte
Eu acredito que o seu "P" como o parâmetro dataWithBytes
deve ser "buf"
desde que i2d_PrivateKey coloca o ponteiro no buffer de saída p no final do buffer e aguarda por mais informações, e o buf ainda está apontando para o início do seu buffer.
O código a seguir funciona para mim, onde pkey é um ponteiro para um EVP_PKEY:
Você pode usar um conversor on-line para converter seus dados binários na base 64 ( http://tomeko.net/online_tools/hex_to_base64.php?lang=en ) e compará-lo com a chave privada no seu arquivo cert depois de usar o seguinte comando e verificando a saída do mypkey.pem:
Mencionei sua pergunta e este site de funções do EVP para minha resposta.
fonte
Swift 3:
fonte
Uma maneira simples de converter NSData arbitrário em NSString é codificá-lo com base64.
Você pode armazená-lo no seu banco de dados para reutilização posteriormente. Apenas decodifique de volta para NSData.
fonte
Swift 5 :
fonte