gpt4 book ai didi

c - ASN1_INTEGER 到 ASN1_STRING

转载 作者:太空狗 更新时间:2023-10-29 17:05:34 25 4
gpt4 key购买 nike

我正在使用 openssl 获取有关 x509 证书的数据。有没有一种方法可以将 ASN1_INTEGER 转换为 ASN1_STRING,这样可以轻松地将其转换为 char 数组?有没有办法将其转换为任何其他人类可读的格式?

编辑:我正在使用为 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]];
}

如果有更简单的方法,我真的很想知道。

最佳答案

使用内置的 BN_bn2hex(BIGNUM *) 函数可以更简单地完成 ascii 十六进制转换

ASN1_INTEGER *serial = X509_get_serialNumber(certificateX509);
BIGNUM *bnser = ASN1_INTEGER_to_BN(serial, NULL);
char *asciiHex = BN_bn2hex(bnser);

关于c - ASN1_INTEGER 到 ASN1_STRING,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9646929/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com