2017-01-31 3 views
1

Ich habe folgende ASN1 structure definieren golangkann nicht korrekt struct für Asn Decodierung in golang

SEQUENCE(2 elem) 
    SEQUENCE(2 elem) 
      OBJECT IDENTIFIER1.2.840.113549.1.1.1 
      NULL 
    BIT STRING(1 elem) 
      SEQUENCE(2 elem) 
       INTEGER(2048 bit) 20832… 
       INTEGER 65537 

zu dekodieren unter Verwendung von und I die folgende struct bin mit der decodierten Daten zu speichern:

type OidAndNullSET struct { 
    OID asn1.ObjectIdentifier 
    Null asn1.RawValue 
} 

type Seq struct { 
    Set OidAndNullSET 
    BitStr asn1.BitString 
} 

func main() { 
    mdata2 := []byte("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhxW+fVIU3KiVWyHy5RZ6jMQrXbrpUNOrz8V29qhZ98G53o6yKeUc2dOXC/dX2w8lEXjf+Hys9BLAJJZc6dlV1vrVZM5C9fvCAMHlAcMW2AADLuG+SruM6URBedSAxMFVwAzsSApLEQSlfGyMvjT+UOrHEjBUMn4+IPiLW2G0o1pHxCkrUxub/RWpl5qO7BbuEQj4flbUGpOpFW+XOuYu78MRmEvl/E9SX8b04RrXZTxPMAqxAl/zRA7VgIVzwtcm6xjzFw8kvr7H4B/zb7Jvl32FhniXMOrPfSGI2xhrr92DTOaPXuPFH2DywbNj/O21fenykWYsB/bA8vH7/EmQdwIDAQAB") 


    var n Seq 
    _, err1 := asn1.Unmarshal(mdata2, &n) 
    checkError(err1) 

    fmt.Println("After unmarshal: ", n) 
} 

func checkError(err error) { 
    if err != nil { 
     fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error()) 
     os.Exit(1) 
    } 
} 

I kann keine geeignete Struktur finden, um eine SEQUENCE * zu speichern und den folgenden Fehler zu erhalten

Beliebige th oughts?

+0

Ich weiß nicht Golang. Ich schätze der Fehler sagt Ihnen, dass es ein [APPLICATION 13] -Tag gefunden hat ?? Aber solche Daten sind in Ihren Daten nicht enthalten. Was zu meiner nächsten Frage führt - wenn Sie mdata2 zuweisen, wird diese Zeichenfolge als base64 interpretiert, oder werden die Zeichen gemäß beispielsweise UTF-8 in Bytes konvertiert? Das könnte dein Problem sein. – Kevin

Antwort

0

Sie haben den base64-codierten ASN.1-Stream definiert und müssen ihn vor der Übergabe an Unmarshal decodieren. Betrachten wir die nächste Definition:

mdata2, _ := base64.StdEncoding.DecodeString("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhxW+fVIU3KiVWyHy5RZ6jMQrXbrpUNOrz8V29qhZ98G53o6yKeUc2dOXC/dX2w8lEXjf+Hys9BLAJJZc6dlV1vrVZM5C9fvCAMHlAcMW2AADLuG+SruM6URBedSAxMFVwAzsSApLEQSlfGyMvjT+UOrHEjBUMn4+IPiLW2G0o1pHxCkrUxub/RWpl5qO7BbuEQj4flbUGpOpFW+XOuYu78MRmEvl/E9SX8b04RrXZTxPMAqxAl/zRA7VgIVzwtcm6xjzFw8kvr7H4B/zb7Jvl32FhniXMOrPfSGI2xhrr92DTOaPXuPFH2DywbNj/O21fenykWYsB/bA8vH7/EmQdwIDAQAB") 

Dann sollte es nach "encoding/base64" die Einfuhren Zugabe arbeiten.