Java 解析ASN1编码的整数
我有这样的数据序列Java 解析ASN1编码的整数,java,bouncycastle,Java,Bouncycastle,我有这样的数据序列 ASN1InputStream asn1InputStream = new SN1InputStream(attestationExtensionBytes); DEROctetString octString=(DEROctetString) asn1InputStream.readObject(); byte[] octectBytes=octString.getOctets(); asn1InputStream =new ASN1InputStream (octectB
ASN1InputStream asn1InputStream = new SN1InputStream(attestationExtensionBytes);
DEROctetString octString=(DEROctetString) asn1InputStream.readObject();
byte[] octectBytes=octString.getOctets();
asn1InputStream =new ASN1InputStream (octectBytes);
ASN1Integer asn1Integer=(ASN1Integer)asn1InputStream.readObject();
序列(2个元素)
对象标识符1.3.6.1.4.1.41482.3.7
八位字符串(1个元素)
整数7029542
我可以得到八进制字符串,十六进制是02036b4326
02我认为是整数标记,03是长度,6b4326是整数的十六进制值
尝试查找是否有内置的BouncyCastle库,在那里我可以传递十六进制值或DerOctString,并能够返回整数值 我想我找到了答案,看起来您必须创建一个新的ASN1InputStream,并将八进制字符串的值传递给它,然后作为ASN1Integer读回 像这样的
ASN1InputStream asn1InputStream = new SN1InputStream(attestationExtensionBytes);
DEROctetString octString=(DEROctetString) asn1InputStream.readObject();
byte[] octectBytes=octString.getOctets();
asn1InputStream =new ASN1InputStream (octectBytes);
ASN1Integer asn1Integer=(ASN1Integer)asn1InputStream.readObject();
你的结构看起来有点不清楚。如果我理解正确,八进制字符串包含整数的DER编码。只需分两步进行解码,第一步是外部值,第二步是八位字节字符串的字节。在BC的最新版本中,可以使用ASN1Integer.getInstance(octString.getOctets())。它比上面的代码好,因为它还检查整数后面的八位字节字符串中是否没有“额外”数据。