【问题标题】:Parse ASN.1 encoding using Java使用 Java 解析 ASN.1 编码
【发布时间】:2018-09-17 13:27:09
【问题描述】:

当文件具有这种语法并且文件扩展名为 .air 而不是 .asn 文件扩展名时,我如何使用 Java 读取 ASN.1 文件

Tagged[6]IMPLICIT
 Sequence
  Tagged[0]IMPLICIT
   OCTET STRING[3](UGW)
  Tagged[1]IMPLICIT
   OCTET STRING[5](nair1)
  Tagged[3]IMPLICIT
   OCTET STRING[13](6430408182034)
  Tagged[5]IMPLICIT
   OCTET STRING[19](201211113336+0300)
  Tagged[6]IMPLIIT
   OCTET STRING[5](nair1)

【问题讨论】:

  • 虽然 ASN.1 与安全有关,但您的问题不是安全问题,因为它完全与编程有关。
  • 实际上我正在编写一个流中介系统,所以我的第一步是尝试将此代码解析为 java 程序安全性将包含在接下来的步骤中。
  • 那么当您进入下一步时,请随时提出一个新问题 :) -- 我同意 Androl 的观点,即 这个问题 纯粹是编程。我投票支持迁移到 Stack Overflow,在那里您会得到更好的答案。
  • @MikeOunsworth 感谢您的建议,我会这样做的。

标签: java file parsing encoding asn.1


【解决方案1】:

你的 ASN.1 定义看起来是错误的。我建议将其更正如下:

My-Schema DEFINITIONS IMPLICIT TAGS ::= 
BEGIN
  MySequence ::= SEQUENCE       
  {                                                     
     str1      OCTET STRING (SIZE(1..50)),
     str2      OCTET STRING (SIZE(1..50)),
     str3      OCTET STRING (SIZE(1..50)),
     str4      OCTET STRING (SIZE(1..50)),
     str5      OCTET STRING (SIZE(1..50))
   }                                                     
END

可以使用 bountycastle ASN.1 API 轻松编码

import org.bouncycastle.asn1.*;

    ASN1EncodableVector v = new ASN1EncodableVector();
    v.add(new DEROctetString("str1".getBytes()));
    v.add(new DEROctetString("str2".getBytes()));
    v.add(new DEROctetString("str3".getBytes()));
    v.add(new DEROctetString("str4".getBytes()));

    byte[] encoded = new DERSequence(v).getEncoded();

【讨论】:

  • 如果我的文件有.air扩展名而不是.asn文件扩展名怎么办
  • 如果我的文件有.air扩展名而不是.asn文件扩展名怎么办
猜你喜欢
  • 2014-12-27
  • 1970-01-01
  • 2015-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多