我一直试图按照server?language=objc中提到的步骤解码八进制字符串。
以下是我尝试过的:
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]“
发布于 2022-02-16 16:46:21
“八进制字符串”只是现代语言称之为“字节数组”的一个规范短语。您已经提取了octs
的值,并且应该将该值与任何需要将其进行比较的值进行比较。
发布于 2022-02-22 11:51:43
对于Ios AppAttestation,如下所示获得扩展值及其对应的八进制字符串。正如那一页所提到的,
获得credCert扩展的值,OID1.2.840.113635.100.8.2,这是一个编码的ASN.1序列.解码序列并提取其中包含的单个八进制字符串。
下面是示例代码:
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());
https://stackoverflow.com/questions/71123740
复制相似问题