Maison  >  Article  >  développement back-end  >  Comment rassembler les clés privées PKCS8 dans Go ?

Comment rassembler les clés privées PKCS8 dans Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-26 15:51:03219parcourir

How to Marshal PKCS8 Private Keys in Go?

Marshaling des clés privées PKCS8 dans Go

Dans Go, la question de savoir s'il existe un moyen pratique de rassembler les clés privées PKCS8 dans la version 1.5 se pose . Semblable à la fonction x509.MarshalPKCS1PrivateKey, les développeurs recherchent un mécanisme efficace pour convertir les clés privées en données sérialisées.

Bien que Go ne fournisse pas de fonction intégrée à cet effet spécifique, il existe une solution personnalisée qui résout ce problème. exigence :

type pkcs8Key struct {
    Version             int
    PrivateKeyAlgorithm []asn1.ObjectIdentifier
    PrivateKey          []byte
}

func rsa2pkcs8(key *rsa.PrivateKey) ([]byte, error) {
    var pkey pkcs8Key
    pkey.Version = 0 // Default version for PKCS8
    pkey.PrivateKeyAlgorithm = make([]asn1.ObjectIdentifier, 1)
    pkey.PrivateKeyAlgorithm[0] = asn1.ObjectIdentifier{1, 2, 840, 113549, 1, 1, 1} // RSA encryption algorithm OID
    pkey.PrivateKey = x509.MarshalPKCS1PrivateKey(key)

    return asn1.Marshal(pkey)
}

Cette fonction personnalisée, rsa2pkcs8, vous permet de convertir un objet rsa.PrivateKey en un tableau d'octets codé PKCS8. Il définit la version sur 0, spécifie l'OID de l'algorithme de chiffrement RSA et intègre la clé privée PKCS1 marshalée dans le champ PrivateKey de la structure pkcs8Key. En appelant asn1.Marshal sur cette structure, vous obtenez les données sérialisées représentant la clé privée PKCS8.

L'utilisation de cette solution donne aux développeurs Go la possibilité de rassembler les clés privées PKCS8, leur fournissant ainsi un utilitaire pratique pour diverses opérations cryptographiques. scénarios d'opérations et d'échange de données.

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:
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