java - 如何在 Java Spring 中实现 ASN1 解码?
问题描述
我需要从一个复杂的序列中解码 ASN1 字符串,但我就是不知道这整件事是如何工作的。我想做类似的事情
decoder = ASN1Library.initWithSequence(sequenceString);
ParseObject obj = decoder.decodeString(asn1String);
我尝试了一些库,但没有一个允许我做我想做的事,或者我无法理解它们是如何工作的。我想我需要自己实现一个解析器。
任何人都可以解释如何做到这一点?非常感谢!
解决方案
好的,这就是我发现的。我正在使用com.objsys.asn1j.runtime
图书馆;我需要在 Java 类中实现整个序列,并使每个类都扩展Asn1Seq
,Asn1Integer
或者库中的其他超类。在扩展 Asn1Seq 的每个类(即所有类似序列的类)中,我需要重写该decode
方法,并且在主体中,我必须decode
再次调用该类的每个属性。
快速示例(Type1
和Type2
扩展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);
}
推荐阅读
- qt - 从 C++ 更新 QML Window 属性标志
- javascript - Vue 2;在“firebase/app”中找不到导出“默认”(导入为“firebase”)
- python - 使用 python 和 Biopython 加入不同的 FASTA 文件
- terraform - 使用 terraform 模块管理结果的细微差异
- go - 为什么在 Go 中访问 nil 指针会导致中序遍历出错
- docker - 如何在 debian 中设置 docker 服务的最大内存限制?
- python - 我如何告诉 Scrapy 抓取 start_urls 中的 data-url 而不是 url 本身?
- botframework - 访问以前的机器人响应(字符串)Microsoft Bot Composer
- dataframe - PySpark:如何在排序数据库中为下一个和上一个事件添加列?
- sql - 将 Oracle 程序和子过程移植到 postgres