Как реализовать декодирование ASN1 в Java Spring?

Мне нужно декодировать строки ASN1 из сложной последовательности, но я просто не могу понять, как все это работает. Я бы хотел сделать что-то вроде

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

Я пробовал несколько библиотек, но ни одна из них не позволяла мне делать то, что я хочу, или я не мог понять, как они работают. Думаю, мне нужно самому реализовать парсер.

Кто-нибудь может объяснить, как это сделать? Большое спасибо!

Такие просьбы здесь не по теме.

GhostCat 21.08.2018 10:35

@GhostCat, ты совершенно прав, мне очень жаль, что я не приложил много усилий, чтобы написать хороший вопрос. Я также редактировал исходный вопрос.

afe 21.08.2018 14:17

Это лучше, не идеально, но лучше ;-) ... для "идеального" вопроса вы должны обрисовать в общих чертах то, что вам нужно, и что эти библиотеки не предоставляют. Но, по крайней мере, для меня вопрос сейчас "достаточно хорош".

GhostCat 21.08.2018 14:22
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
3
238
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хорошо, вот что я нашел. Я использую библиотеку com.objsys.asn1j.runtime; Мне нужно реализовать всю последовательность в классах Java и заставить каждый класс расширять Asn1Seq, Asn1Integer или другие суперклассы из библиотеки. В каждом классе, который расширяет Asn1Seq (т.е. все классы, подобные Sequence), мне нужно переопределить метод 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);
}

Другие вопросы по теме