我应该将 ASN1编码的字节数组解析为Java对象。我公司给了我一份非常详细的文件。然而,在他们解析数据的例子中(没有代码,只是从位映射到值):
标签和长度的没有考虑因素。该示例也只是跳过进行中的字节。我不确定如何使用 Bouncy Castle ASN1库解析这样的数据。
这是数据:
这是映射:
22 0....... some field = 0
.01000.. some field = 8
......1. some field = 1
.......0 some field = 0
ASN1编码数据是否必须采用Tag-Length-Value格式,还是可以使用某种特定语法?
现在这是我的代码:
ASN1InputStream asn1InputStream = new ASN1InputStream(
new ByteArrayInputStream(
ByteArrayUtil.hexStringToByteArray(
"16" + "07" +
"22" + "00" + "00" + "19" + "BF" + "12" + "E0")));
ASN1Primitive deria5String;
while ((deria5String = asn1InputStream.readObject()) != null) {
//process
}
解析最后7个字节给出了DERIA5String类型的对象。
答案 0 :(得分:1)
ASN1编码数据是否必须采用Tag-Length-Value格式或 可以使用某种特定的语法吗?
BER和DER编码数据使用TLV格式。但是,这并不意味着某些八位字符串,整数,字符串等没有被应用程序赋予某些特殊含义(ASN.1中未表示)。如果我冒险猜测,因为" 16 07"对应于标签[UNIVERSAL 22]和长度7,其中该特定标签表示字符串,我猜他们正在从字符串中解析一些数据。