Maison  >  Article  >  développement back-end  >  Comment faire pour marshaler/démarcher asn1 et omettre des champs ?

Comment faire pour marshaler/démarcher asn1 et omettre des champs ?

PHPz
PHPzavant
2024-02-09 10:57:08529parcourir

如何进行 asn1 marshal/unmarshal 并省略字段?

L'éditeur PHP Apple vous présentera comment effectuer le marshal/unmarshal asn1 et omettre des champs. Lorsqu'il s'agit de l'encodage asn1, nous avons souvent besoin d'encoder (maréchaler) ou de décoder (démarrer) les données, mais parfois nous ne nous soucions que de certains champs sans analyser la structure entière. Pour atteindre cet objectif, nous pouvons utiliser certaines techniques pour omettre les champs inutiles, améliorant ainsi l'efficacité du traitement. Ensuite, nous détaillerons comment y parvenir.

Contenu des questions

type bearer struct {
    CreatedAt time.Time     `asn1:"generalized"`
    ExpiresAt time.Time     `asn1:"generalized"`
    Nonce     string
    Signature []byte        `asn1:"-"`
    TTL       time.Duration `asn1:"-"`
    Frequency int           `asn1:"-"`
}

c := &bearer{
  CreatedAt: time.Now()
  ExpiresAt: time.Now().Add(1*time.Minute())
  Nonce: "123456789abcdefghijklmnop"
  Frequency: 1
}

b, err := asn1.Marshal(*c)
os.WriteFile("b64.txt", b, 0777)

La structure sera marshalée avec succès, cependant, lors de l'inspection de la structure à l'aide de Bash base64 -d b64.txt > b64.txt.der Je vois toujours asn1:"-" les champs sont en fait marshalés et écrits dans le fichier, et les champs sans valeurs obtiennent <code>Erreur : la longueur de l'objet est nulle.. Pourquoi asn1:"-" ne fonctionne-t-il pas comme json ? base64 -d b64.txt > b64.txt.der 我仍然可以看到 asn1:"-" 字段实际上已编组并写入文件,并且没有值的字段得到 Error: 对象长度为零.。为什么 asn1:"-" 不像 json 那样工作?

解决方法

因为 encoding/json 包是为了支持 - 选项而实现的,而encoding/asn1 不是。至于为什么,这里不是地方。接受 encoding/asn1

Solution

Parce que le package encoding/json est destiné Implémenté pour prendre en charge l'option - et encoding/asn1 Non. Quant à savoir pourquoi, ce n’est pas le bon endroit. L'objectif principal de l'acceptation de encoding/asn1 est de prendre en charge la lecture et l'écriture de certificats X.509, il n'est pas censé être un « couteau suisse » des implémentations ASN1.

bearer.bearerAsn1,所以bearerSi vous souhaitez exclure certains champs, créez un type de structure qui exclut ces champs. Pour éviter les duplications, vous pouvez intégrer ces structures « épurées » dans vos propres structures qui incluent des champs supplémentaires, par exemple :

type bearerAsn1 struct {
    CreatedAt time.Time `asn1:"generalized"`
    ExpiresAt time.Time `asn1:"generalized"`
    Nonce     string
}

type bearer struct {
    bearerAsn1
    Signature []byte
    TTL       time.Duration
    Frequency int
}
🎜Seulement marshal/unmarshal 🎜Les autres champs seront naturellement exclus. 🎜

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer