Tôi đang sử dụng openssl để lấy dữ liệu về chứng chỉ x509. Có cách nào để chuyển đổi ASN1_INTEGER thành ASN1_STRING, có thể dễ dàng chuyển thành mảng char không? Có cách nào để chuyển đổi nó sang bất kỳ định dạng nào khác có thể đọc được của con người không?ASN1_INTEGER to ASN1_STRING
EDIT: Tôi đang sử dụng openssl được biên dịch cho iOS, vì tôi đang có dự án iOS. Đây là mã tôi đang sử dụng để trích xuất các số serial từ chứng chỉ:
ASN1_INTEGER *serial = X509_get_serialNumber(certificateX509);
long value = ASN1_INTEGER_get(serial);
NSLog(@"Serial %ld", value);
certificateX509
là một đối tượng X509 có giá trị và tôi đã được quản lý để có được một số lĩnh vực khác từ nó (tên tổ chức phát hành, thời hạn sử dụng và vân vân)
EDIT 2:
cuối cùng tôi đã đến một giải pháp, trong đó có thể không phải là đơn giản nhất:
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 sau đó chứa các ký tự có giá trị cần được đọc như nguyên hex trong orde r để lấy các giá trị logic. tôi sử dụng NSMutableString để tạo ra một chuỗi có thể đọc được con người:
NSMutableString *str = [[NSMutableString alloc] init];
for (int i=0; i<n; i++) {
NSString *temp = [NSString stringWithFormat:@"%.6x", hexbuf[i]];
[str appendString:[NSString stringWithFormat:@"%@ ", temp]];
}
Nếu có một cách đơn giản hơn, tôi thực sự muốn biết điều đó.
Không chắc chắn về những gì anh ấy hỏi, nhưng đối với số sê-ri chứng chỉ, điều này có thể không hữu ích. Ví dụ: tôi đã kiểm tra một chứng chỉ và số sêri là "3c 08 cf ee là 9f eb c4 2b b1 3e e0 3d 62 0b df". Đúng là không có cách nào khác ngoài việc mở các tệp tiêu đề và tìm hiểu thông tin. –
bạn đúng, điều đó không hiệu quả với tôi. Tôi luôn nhận được -1 là một giá trị dài – Maggie
Có vẻ như bạn không nhận được ASN1_INTEGER trong số chứng chỉ. Có lẽ đó là một BIGNUM? Bạn có thể thêm mã bạn đã sử dụng để trích xuất nó từ chứng chỉ cho câu hỏi không? –