Я использую openssl для получения данных о сертификате x509.Есть ли способ конвертировать ASN1_INTEGER в ASN1_STRING, который можно легко преобразовать в массив символов?Есть ли способ конвертировать его в любой другой читаемый человеком формат?
РЕДАКТИРОВАТЬ: я использую openssl для iOS, так как у меня есть проект iOS.Вот код, который я использую для извлечения серийного номера из сертификата:
ASN1_INTEGER *serial = X509_get_serialNumber(certificateX509);
long value = ASN1_INTEGER_get(serial);
NSLog(@"Serial %ld", value);
certificateX509
является допустимым объектом X509, и мне удалось получить некоторые другие поля из него (имя эмитента, дата истечения срока действия)и так далее)
РЕДАКТИРОВАТЬ 2:
Я наконец-то пришел к решению, которое может быть не самым простым:
ASN1_INTEGER *serial = X509_get_serialNumber(certificateX509);
BIGNUM *bnser = ASN1_INTEGER_to_BN(serial, NULL);
int n = BN_num_bytes(bnser);
unsigned char outbuf[n];
int bin = BN_bn2bin(bnser, outbuf);
char *hexbuf = (char*) outbuf;
hexBuf содержит символы, значение которых должно бытьчитать как шестнадцатеричное целое, чтобы получить логические значения.Я использую NSMutableString для создания удобочитаемой строки:
NSMutableString *str = [[NSMutableString alloc] init];
for (int i=0; i<n; i++) {
NSString *temp = [NSString stringWithFormat:@"%.6x", hexbuf[i]];
[str appendString:[NSString stringWithFormat:@"%@ ", temp]];
}
Если есть более простой способ, я действительно хотел бы знать это.