如何在Java Spring中实现ASN1解码?

时间:2018-08-21 08:31:24

标签: java spring asn.1

我需要从一个复杂的序列中解码ASN1字符串,但我只是无法弄清楚这整个过程是如何工作的。我想做类似的事情

decoder = ASN1Library.initWithSequence(sequenceString);
ParseObject obj = decoder.decodeString(asn1String);

我尝试了一些库,但是没有一个库允许我做我想做的事,或者我无法理解它们是如何工作的。我想我需要自己实现一个解析器。

有人可以解释如何做吗? 非常感谢你!

1 个答案:

答案 0 :(得分:0)

好的,这就是我发现的。 我正在使用com.objsys.asn1j.runtime库;我需要在Java类中实现整个序列,并使每个类扩展库中的Asn1SeqAsn1Integer或其他超级类。 在每个扩展Asn1Seq的类(即所有类似于Sequence的类)中,我需要重写decode方法,在主体中,我必须再次对该类的每个属性调用decode

快速示例(Type1Type2都扩展了Asn1Integer):

class SeqData extends Asn1Seq {

private static final long serialVersionUID = 55L;

  Type1 attribute1;
  Type2 attribute2;

@Override
public int getElementCount() {
    return 2;
}

@Override
public String getElementName(int arg0) {
    switch (arg0) {
    case 0:
        return "attribute1";
    case 1:
        return "attribute2";
    }
    return "";
}

@Override
public Object getElementValue(int arg0) {
    switch (arg0) {
    case 0:
        return attribute1;
    case 1:
        return attribute2;
    }
    return null;
}

@Override
public void decode(Asn1PerDecodeBuffer arg0) throws Asn1Exception, IOException {

    attribute1 = new Type1();
    attribute1.decode(arg0, 1L, 62L);

    attribute2 = new Type2();
    attribute2.decode(arg0, 1L, 62L);
}