Maison > développement back-end > Golang > Échec du démarshalage de l'ASN

Échec du démarshalage de l'ASN

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Libérer: 2024-02-14 16:27:08
avant
1234 Les gens l'ont consulté

解组 asn 失败

l'éditeur php Xigua est là pour partager avec vous une question sur "l'échec de la démarshallisation". Dans les communications réseau, l'ASN (Autonomous System Number) est un numéro utilisé pour identifier les systèmes autonomes. Cependant, le dégroupage échoue parfois lors du dissociation de l'ASN. Cela peut être dû à un format de codage ASN incorrect, à des paquets ASN endommagés ou à des analyseurs incompatibles. Dans cet article, nous aborderons les raisons et les solutions à l’échec du démobilisation de l’ASN pour aider chacun à mieux comprendre et résoudre ce problème.

Contenu des questions

package main

import (
    "encoding/asn1"
    "fmt"
)

type SimpleStruct struct {
    Value int
}

func main() {
    berBytes := []byte{0x02, 0x01, 0x05}

    var simpleStruct SimpleStruct
    _, err := asn1.Unmarshal(berBytes, &simpleStruct)
    if err != nil {
        fmt.Println("Error:", err)
        return
    }

    fmt.Printf("Decoded value: %d\n", simpleStruct.Value)
}
Copier après la connexion

J'ai essayé de désorganiser mais j'ai obtenu l'erreur suivante :

<code>
Error: asn1: structure error: tags don't match (16 vs {class:0 tag:2 length:1 isCompound:false}) {optional:false explicit:false application:false private:false defaultValue: tag: stringType:0 timeType:0 set:false omitEmpty:false} SimpleStruct @2
</code>
Copier après la connexion

Quelqu'un peut-il m'aider ? Merci

La solution de contournement

0x020105 encode l'entier 5 (voir https://www.php.cn/link/8ae7733f9bc11275e8d0a0fdabe5be0a), il doit donc être non marshalé en un entier, pas une structure avec un champ entier :

package main

import (
    "encoding/asn1"
    "fmt"
)

func main() {
    berBytes := []byte{0x02, 0x01, 0x05}

    var v int
    _, err := asn1.Unmarshal(berBytes, &v)
    if err != nil {
        fmt.Println("Error:", err)
        return
    }

    fmt.Printf("Decoded value: %d\n", v)
    // Output:
    //   Decoded value: 5
}
Copier après la connexion

et SimpleStruct{Value: 5} 被编组为 0x3003020105 :

package main

import (
    "encoding/asn1"
    "fmt"
)

type SimpleStruct struct {
    Value int
}

func main() {
    simpleStruct := SimpleStruct{Value: 5}
    buf, err := asn1.Marshal(simpleStruct)
    if err != nil {
        fmt.Println("Error:", err)
        return
    }

    fmt.Printf("Encoded value: 0x%x\n", buf)
    // Output:
    //   Encoded value: 0x3003020105
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal