L’analisi di ASN.1 dati binari con Java

Ho binarie ASN.1 dati oggetti di cui ho bisogno per analizzare nel mio progetto Java. Voglio solo ASN.1 struttura e dati analizzati, ad esempio, dalla BER viewer:

L'analisi di ASN.1 dati binari con Java

ASN.1 parser di BouncyCastle non è in grado di analizzare questa struttura (restituisce solo applicazioni specifiche di tipo di dati binari).

Cosa ASN.1 biblioteca è possibile utilizzare per ottenere un risultato simile? Qualcuno ha il codice di esempio viene illustrato come analizzare un ASN.1 oggetto?

BTW: anche io ho provato diverse gratuito ASN.1 Java compilatori, ma nessuno è in grado di generare lavoro codice Java dato può ASN.1 specificazione.

  • Si vuole solo analizzare un flusso di BER dati, o non si vuole implementare una specifica ASN.1 grammatica?
  • Ho un ASN.1 la grammatica, ma l’ASN.1 compilatori che ho provato non lo accetta. Comunque preferirei non essere limitato a quelli oggetti che ho la grammatica.
InformationsquelleAutor Robert | 2012-04-17

 

6 Replies
  1. 18

    Devo correggere me stesso – è possibile leggere i dati utilizzando ASN.1 parser incluso nel BouncyCastle – tuttavia il processo non è così semplice.

    Se si desidera stampare solo i dati contenuti in un ASN.1 struttura vi consiglio di utilizzare la classe org.bouncycastle.asn1.util.ASN1Dump. Può essere utilizzata la seguente semplice frammento di codice:

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

    Stampa la struttura ma non i dati – ma copiando il ASN1Dump in una propria classe e la modifica per la stampa, per esempio, OCTET_STRINGS questo può essere fatto facilmente.

    Inoltre il codice in ASN1Dump dimostra di analizzare ASN.1 strutture. Per esempio, i dati utilizzati nell’mia domanda può essere analizzato un livello più profondo, utilizzando il seguente codice:

    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);
    }
  2. 4

    Basta usare il “vero” per stampare i valori

        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();
    • Per informazioni scopo: La dumpAsString con due parametri non è disponibile in anziani bouncycastle versioni.
  3. 3

    Non è chiaro dalla tua domanda se non si dispone di ASN.1 specifica per il regolamento che si sta cercando di analizzare. Si prega di notare che senza l’ASN.1 specificazione, si possono fare solo parziale senso dei dati in caso di ESPLICITA TAG sono stati utilizzati in ASN.1 specificazione, da cui è stato generato. Alcuni strumenti, come quello di OSS Nokalva dispone di una libreria (file jar) chiamato JIAAPI che permette di attraversare e manipolare BER codifiche senza una preventiva conoscenza dell’ASN.1 specificazione.

    Se si dispone di ASN.1 specificazione, qualsiasi ASN.1 compilatore Java dovrebbe essere in grado di gestire questo.

    È possibile scaricare una versione di prova gratuita di OSS ASN.1 Strumenti per Java da http://www.oss.com/asn1/products/asn1-download.html per vedere se funziona meglio per voi che gli altri si è cercato invano.

  4. 2

    Se si desidera solo per decodificare il BER-dati codificati, ci sono numerosi parser là fuori. Hai provato uno? Ci sono anche due in Sun JDK – com.sole.jmx.snmp.BerDecoder e com.sole.jndi.ldap.BerDecoder.

    • Nota: JDK classi in com.sole.* i pacchetti non sono pubbliche le Api può essere rimosso/ modificato nelle versioni future.
    • Vorrei dare a quelli delle classi a provare, ma la documentazione di tali classi è buono come la documentazione di alcune altre ASN.1 progetti: quasi non esistente…
    • La documentazione non è l’ideale, ma le classi sono semplici, e si può ottenere il codice sorgente attraverso OpenJDK. Immagino che si può imparare tutto ciò che hai bisogno di sapere che per la lettura e la sperimentazione.
  5. 2

    Ho bisogno di essere in grado di analizzare qualsiasi tipo di ASN.1 dati in krypt. Anche se krypt è un Rubino progetto, si potrebbe desiderare di avere uno sguardo alla JRuby estensione – il codice per la gestione ASN.1 analisi/codifica è scritto interamente in Java e modulare abbastanza per una facile estrazione.

    Ho anche fatto un Java versione solo, ma manca di alcune funzionalità livello superiore del primo. Ma dal momento che è conciso, forse è una buona occasione per iniziare.

    • Il codice sembra bello – purtroppo ho notato che non ho solo bisogno di un ASN.1 parser/deserializer ma anche la serializzazione di parte.
    • Grazie! Ho smesso di avanzare Java versione solo quando ho iniziato l’integrazione nel krypt, lì troverete anche il serializzazione bit. Tutta l’impl pacchetto è auto-contenuto, in modo da non essere mescolati con JRuby specifiche – si dovrebbe essere in grado di estrarre facilmente.
  6. 1

    Sto usando bouncycastle API per stampare la stringa struttura, si riporta di seguito il frammento di codice:

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

    Nel risultato di stampa struttura, ma nella stringa di ottetto è della lunghezza di stampa invece di valore.
    Come stampare valore?

    • Che cosa è CustomTreeNode ?

Lascia un commento