解析ASN1数据

时间:2016-01-13 10:00:54

标签: java parsing bouncycastle asn.1

我应该将 ASN1编码的字节数组解析为Java对象。我公司给了我一份非常详细的文件。然而,在他们解析数据的例子中(没有代码,只是从位映射到值):

  1. 将最后7个字节从HEX转换为二进制
  2. 根据7个字节中的特定位分配值
  3. 标签和长度没有考虑因素。该示例也只是跳过进行中的字节。我不确定如何使用 Bouncy Castle ASN1库解析这样的数据。

    这是数据:

    Example data

    这是映射:

    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类型的对象。

    编辑1:以下是我应该阅读InputStream的ASN1结构的定义: Data definition

    这是我在文档中读取InputStream的示例: Example of parsing

1 个答案:

答案 0 :(得分:1)

  

ASN1编码数据是否必须采用Tag-Length-Value格式或   可以使用某种特定的语法吗?

BER和DER编码数据使用TLV格式。但是,这并不意味着某些八位字符串,整数,字符串等没有被应用程序赋予某些特殊含义(ASN.1中未表示)。如果我冒险猜测,因为" 16 07"对应于标签[UNIVERSAL 22]和长度7,其中该特定标签表示字符串,我猜他们正在从字符串中解析一些数据。