Sử dụng API OpenSSL, tôi đã trích ra một phần mở rộng tùy chỉnh từ một chứng chỉ X.509v3 với:Giải mã một ASN.1 DER OCTET STRING với OpenSSL
X509_EXTENSION* ex = X509_get_ext(x509, 4);
Đối tượng X509_EXTENSION chứa một giá trị (ex- > giá trị) là một ASN.1 OCTET STRING. OCTET STRING chứa chuỗi UTF-8 được mã hóa DER. Tôi đang cố gắng giải mã OCTET STRING để nhận được chuỗi UTF-8 thuần túy.
Tôi đã thử một vài điều, chẳng hạn như:
ASN1_STRING_to_UTF8(&buf, ex->value);
và
M_ASN1_OCTET_STRING_print(bio, ex->value);
int len = BIO_read(bio, buf, buf_size);
buf[len] = '\0';
Những cả cho tôi chuỗi DER mã hóa. Làm cách nào để nhận được chuỗi UTF-8 thuần túy?
Tôi đã sử dụng 'asn1_get_object' để thực hiện việc này trong khi trước, theo ví dụ trong mã openssl (xung quanh crypto/asn1/asn1_par.c: 135). Thật là đau đớn khi giải mã một cấu trúc lớn theo cách này mà tôi khuyên bạn nên sử dụng một trình phân tích cú pháp asn1 thay thế như SNACC hoặc libtasn1. – Francois
@Francois: Cảm ơn bạn về mẹo. Vì tôi không cố gắng giải mã một cấu trúc lớn, chỉ là một chuỗi duy nhất, ASN1_get_object() có thể là đủ. Tuy nhiên, tôi đã cố gắng sử dụng nó, dựa trên cách nó được sử dụng trong asn1_par.c, nhưng không thể làm cho nó hoạt động. Bạn có thể cung cấp một ví dụ? –
@Francois: Tôi đã tìm hiểu cách sử dụng hàm và đăng câu trả lời dựa trên đó. Cảm ơn một lần nữa. –