我正在使用openssl获取有关x509证书的数据。
有没有一种方法将ASN1_INTEGER转换为ASN1_STRING,然后可以轻松地将其转换为char数组?有没有一种方法将其转换为任何其他可读格式?
编辑:我正在使用为iOS编译的openssl,因为我有iOS项目。这是我用来从证书中提取序列号的代码:
如果有更简单的方法,我真的很想知道。
编辑:我正在使用为iOS编译的openssl,因为我有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]];
}
如果有更简单的方法,我真的很想知道。