visual studio microsoft espaƱol descargar community java parsing asn.1

studio - Analizar datos binarios ASN.1 con Java



visual studio installer (6)

Tengo objetos de datos ASN.1 binarios que necesito analizar en mi proyecto Java. Solo quiero la estructura y los datos de ASN.1 tal como son analizados, por ejemplo, por el visor de BER:

El analizador ASN.1 de BouncyCastle no puede analizar esta estructura (solo devuelve el tipo de datos binarios específicos de la aplicación).

¿Qué biblioteca ASN.1 puedo usar para obtener ese resultado? ¿Alguien tiene un código de muestra que demuestre cómo analizar un objeto ASN.1?

Por cierto: también probé varios compiladores Java ASN.1 gratuitos, pero ninguno es capaz de generar código Java de trabajo dado la especificación ASN.1 de mayo.


De su pregunta no queda claro si tiene o no la especificación ASN.1 para la BER que está intentando analizar. Tenga en cuenta que sin la especificación ASN.1, solo puede dar sentido parcial a los datos si se usaron TAGS EXPLÍCITOS en la especificación ASN.1 a partir de la cual se generaron. Algunas herramientas, como la de OSS Nokalva, tienen una biblioteca (archivo jar) llamada JIAAPI que le permite recorrer y manipular codificaciones BER sin el conocimiento previo de la especificación ASN.1.

Si tiene la especificación ASN.1, cualquier compilador de Java ASN.1 debería poder manejar esto.

Puede descargar una versión de prueba gratuita de OSS ASN.1 Tools para Java en http://www.oss.com/asn1/products/asn1-download.html para ver si funciona mejor para usted que las otras que probó sin éxito.


Estoy usando la API de bouncycastle para imprimir la estructura de cadena, a continuación se muestra el fragmento de código:

ASN1InputStream bIn = new ASN1InputStream(input); DERObject obj = bIn.readObject(); System.out.println(CustomTreeNode.dumpAsString(obj));

Como resultado, es la estructura de impresión pero en la cadena de octetos es la longitud de impresión en lugar del valor. ¿Cómo imprimir el valor?


Necesito poder analizar cualquier tipo de datos ASN.1 en krypt. Aunque krypt es un proyecto de Ruby, es posible que desee echar un vistazo a la extensión JRuby : el código para manejar el análisis / codificación ASN.1 está completamente escrito en Java y es lo suficientemente modular para una fácil extracción.

También hice una versión solo para Java , pero faltan algunas de las funcionalidades de nivel superior de la anterior. Pero como es conciso, quizás sea una buena oportunidad para que empieces.



Solo usa "true" para imprimir valores

ASN1InputStream ais = new ASN1InputStream( new FileInputStream(new File("d:/myfile.cdr"))); while (ais.available() > 0) { ASN1Primitive obj = ais.readObject(); System.out.println(ASN1Dump.dumpAsString(obj, true)); } ais.close();


Tengo que corregirme: es posible leer los datos utilizando el analizador ASN.1 incluido en BouncyCastle. Sin embargo, el proceso no es tan simple.

Si solo desea imprimir los datos contenidos en una estructura ASN.1, le recomiendo que use la clase org.bouncycastle.asn1.util.ASN1Dump . Puede ser utilizado por el siguiente fragmento de código simple:

ASN1InputStream bIn = new ASN1InputStream(new ByteArrayInputStream(data)); ASN1Primitive obj = bIn.readObject(); System.out.println(ASN1Dump.dumpAsString(obj));

Imprime la estructura pero no los datos, pero al copiar el ASN1Dump en una clase propia y modificarlo para que imprima, por ejemplo, OCTET_STRINGS, esto se puede hacer fácilmente.

Además, el código en ASN1Dump se muestra para analizar las estructuras ASN.1. Para el ejemplo, los datos utilizados en mi pregunta se pueden analizar un nivel más profundo utilizando el siguiente código:

DERApplicationSpecific app = (DERApplicationSpecific) obj; ASN1Sequence seq = (ASN1Sequence) app.getObject(BERTags.SEQUENCE); Enumeration secEnum = seq.getObjects(); while (secEnum.hasMoreElements()) { ASN1Primitive seqObj = (ASN1Primitive) secEnum.nextElement(); System.out.println(seqObj); }