2016-01-13 297 views
2

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

  1. 在这些7个字节最后7个字节从HEX转换为基于特定位组成的二进制
  2. 分配值

没有考虑标签和长度。该示例还跳过了前面的字节。我不知道如何解析这样的数据,使用Bouncy Castle ASN1库

这是数据:

Example data

这是映射:

22 0....... some field = 0 
    .01000.. some field = 8 
    ......1. some field = 1 
    .......0 some field = 0 

是否ASN1编码的数据必须在标签长度值格式,或能不能正在使用某种特定的语法?

现在这是我的代码:

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:这里是ASN1结构我应该得到读取的InputStream的定义: Data definition

这是我在文档的阅读InputStream中的例子: Example of parsing

+0

您能否为示例数据添加samle ASN1语法定义? –

回答

1

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

BER和DER编码的数据使用TLV格式。但是,这并不意味着某些八位字节字符串,整数,字符串等在您的应用程序中没有给出某些特殊含义,在ASN.1中没有表示。如果我冒险猜测,因为“16 07”对应于标记[UNIVERSAL 22]和长度7,那个特定标记表示字符串,我猜他们正在解析字符串中的某些数据。