Saya menyimpan Kunci pribadi openssl EVP_PKEY sebagai nsdata. Untuk ini saya membuat serial menjadi aliran byte menggunakan kode di bawah ini
unsigned char *buf, *p;
int len;
len = i2d_PrivateKey(pkey, NULL);
buf = OPENSSL_malloc(len);
p = buf;
i2d_PrivateKey(pkey, &p);
dengan pkey berjenis EVP_PKEY. Kemudian saya menyimpan byte dari buffer 'p' sebagai NSData menggunakan baris yang diberikan di bawah ini
NSData *keydata = [NSData dataWithBytes:P length:len];
Sekarang saya mengubahnya menjadi NSString menggunakan kode yang diberikan di bawah ini tetapi ketika saya mencetaknya ke konsol itu memberikan beberapa karakter lain.
NSString *content =[ NSString stringWithCString:[keydata bytes] encoding:NSUTF8StringEncoding];
Bisakah seseorang membantu?
Pada dasarnya saya ingin menyimpan EVP_PKEY ke dalam database sqlite
apakah saya di jalur yang benar? Terima kasih.
NSData
menjadiNSString
.Jawaban:
Objective-C
Anda dapat menggunakan (lihat Referensi Kelas NSString )
Contoh:
Catatan : Harap perhatikan bahwa
NSData
nilainya harus valid untuk pengkodean yang ditentukan (UTF-8 dalam contoh di atas), jika tidaknil
akan dikembalikan:Sebelumnya Swift 3.0
Swift 3.0 dan Selanjutnya
Lihat Referensi String # init (data: encoding :)
sumber
po [[NSString alloc] initWithData:myData encoding:4]
NSData
mungkin berisi nilai byte apa pun, termasuk yang di luar kisaran UTF-8?Swift 3.0 sebelumnya:
Untuk Swift 4.0:
sumber
Saya percaya "P" Anda sebagai parameter dataWithBytes
harus "buf"
karena i2d_PrivateKey meletakkan pointer ke buffer keluaran p di akhir buffer dan menunggu masukan lebih lanjut, dan buf masih menunjuk ke awal buffer Anda.
Kode berikut berfungsi untuk saya di mana pkey adalah penunjuk ke EVP_PKEY:
Anda dapat menggunakan konverter online untuk mengubah data biner Anda menjadi basis 64 ( http://tomeko.net/online_tools/hex_to_base64.php?lang=en ) dan membandingkannya dengan kunci privat di file cert Anda setelah menggunakan perintah berikut dan memeriksa output mypkey.pem:
Saya mereferensikan pertanyaan Anda dan situs fungsi EVP ini untuk jawaban saya.
sumber
Cepat 3:
sumber
Cara sederhana untuk mengonversi NSData arbitrer ke NSString adalah dengan menyandikannya base64.
Anda kemudian dapat menyimpannya ke dalam database Anda untuk digunakan kembali nanti. Cukup decode kembali ke NSData.
sumber
Cepat 5 :
sumber