فك وASN.1 DER OCTET STRING مع بينسل
سؤال
وباستخدام API بينسل، لقد انتزعت تمديد مخصصة من شهادة X.509v3 مع:
X509_EXTENSION* ex = X509_get_ext(x509, 4);
والكائن X509_EXTENSION يحتوي على (قيمة السابقين>) القيمة التي هي STRING ASN.1 OCTET. يحتوي STRING OCTET على DER ترميز UTF-8 السلسلة. أحاول فك STRING OCTET للحصول على سهل UTF-8 السلسلة.
ولقد حاول عدد قليل من الأشياء، مثل:
ASN1_STRING_to_UTF8(&buf, ex->value);
و
M_ASN1_OCTET_STRING_print(bio, ex->value);
int len = BIO_read(bio, buf, buf_size);
buf[len] = '\0';
وكلا تعطي هذه لي سلسلة DER المشفرة. كيف يمكنني الحصول على سهل UTF-8 سلسلة؟
المحلول
وأشارFrancois لي أن وظيفة ASN1_get_object (). أن وظيفة مناسبة لهذا السيناريو حيث يحتوي على تمديد الشهادة فقط قيمة واحدة.
وASN1_get_object () يأخذ المؤشر إلى مؤشر إلى المخزن مؤقت C يحتوي على كائن DER المشفرة. تقوم بإرجاع البيانات نفسها (عن طريق تعديل المؤشر)، وطول البيانات، وASN.1 قيمة العلامة وفئة الكائن ASN.1.
ASN1_OCTET_STRING* octet_str = X509_EXTENSION_get_data(extension);
const unsigned char* octet_str_data = octet_str->data;
long xlen;
int tag, xclass;
int ret = ASN1_get_object(&octet_str_data, &xlen, &tag, &xclass, octet_str->length);
printf("value: %s\n", octet_str_data);
لا تنتمي إلى StackOverflow