首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我试图从X509Certificate扩展中解码和提取八进制字符串,但是没有得到任何有效的字符串。

我试图从X509Certificate扩展中解码和提取八进制字符串,但是没有得到任何有效的字符串。
EN

Stack Overflow用户
提问于 2022-02-15 09:09:20
回答 2查看 440关注 0票数 0

我一直试图按照server?language=objc中提到的步骤解码八进制字符串。

以下是我尝试过的:

代码语言:javascript
运行
复制
        X509Certificate cert1 = getParentCertificate(new String(decodedCredCert));
        System.out.println(cert1);
        cert1.checkValidity(); // verify against apple app attest root ca
        byte[] ext = cert1.getExtensionValue("1.2.840.113635.100.8.2");
        ASN1InputStream bIn = new ASN1InputStream(ext);
        ASN1Primitive obj = bIn.readObject();
        ASN1OctetString string = (ASN1OctetString) obj;
        byte[] octs = string.getOctets();
        ASN1InputStream dIn = new ASN1InputStream(octs);
        String octetString = ASN1Dump.dumpAsString(dIn.readObject());

我得到的输出为:"[1#8333585e692916d8cbcdce3c6aa2bd71617d54fed758957cfd6b50a2093fd506]“

EN

回答 2

Stack Overflow用户

发布于 2022-02-16 16:46:21

“八进制字符串”只是现代语言称之为“字节数组”的一个规范短语。您已经提取了octs的值,并且应该将该值与任何需要将其进行比较的值进行比较。

票数 1
EN

Stack Overflow用户

发布于 2022-02-22 11:51:43

对于Ios AppAttestation,如下所示获得扩展值及其对应的八进制字符串。正如那一页所提到的,

获得credCert扩展的值,OID1.2.840.113635.100.8.2,这是一个编码的ASN.1序列.解码序列并提取其中包含的单个八进制字符串。

下面是示例代码:

代码语言:javascript
运行
复制
byte[] oidValue = credCert.getExtensionValue(ooid);
DEROctetString envelope = (DEROctetString) new ASN1InputStream(oidValue).readObject();
DLSequence sequence = (DLSequence) new ASN1InputStream(envelope.getOctetStream()).readObject();
DLTaggedObject taggedObject = (DLTaggedObject) sequence.getObjectAt(0);
DEROctetString taggedObjectOctet = (DEROctetString) taggedObject.getObject();
log.debug("Octet String : {}", taggedObjectOctet.getOctets());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71123740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档