Heim  >  Artikel  >  Backend-Entwicklung  >  Wie marshaliere ich einen privaten PKCS8-Schlüssel in Go 1.5?

Wie marshaliere ich einen privaten PKCS8-Schlüssel in Go 1.5?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-30 03:02:02181Durchsuche

How to Marshal a PKCS8 Private Key in Go 1.5?

Marshalling eines privaten PKCS8-Schlüssels in Go

Go 1.5 fehlt eine Standardfunktion zum Marshallen privater PKCS8-Schlüssel. Wir können jedoch stattdessen eine benutzerdefinierte Lösung nutzen.

Um einen PKCS8-Schlüssel zu marshalieren, definieren wir eine benutzerdefinierte Struktur pkcs8Key, die das PKCS8-Format darstellt. Es enthält Felder für die Version, den Algorithmus des privaten Schlüssels und die tatsächlichen Bytes des privaten Schlüssels.

Für RSA-Schlüssel verwenden wir die Funktion rsa2pkcs8, um sie in das PKCS8-Format zu konvertieren. Diese Funktion setzt die Version auf 0, weist die entsprechende OID des privaten Schlüsselalgorithmus zu und marshallt den PKCS1-formatierten privaten Schlüssel.

<code class="go">type pkcs8Key struct {
    Version             int
    PrivateKeyAlgorithm []asn1.ObjectIdentifier
    PrivateKey          []byte
}


func rsa2pkcs8(key *rsa.PrivateKey) ([]byte, error) {
    var pkey pkcs8Key
    pkey.Version = 0 
    pkey.PrivateKeyAlgorithm = make([]asn1.ObjectIdentifier, 1)
    pkey.PrivateKeyAlgorithm[0] = asn1.ObjectIdentifier{1, 2, 840, 113549, 1, 1, 1}
    pkey.PrivateKey = x509.MarshalPKCS1PrivateKey(key)

    return asn1.Marshal(pkey)
}</code>

Diese benutzerdefinierte Lösung ermöglicht es uns, private PKCS8-Schlüssel programmgesteuert zu marshalieren, auch wenn Go fehlt eine offizielle Funktion zu diesem Zweck.

Das obige ist der detaillierte Inhalt vonWie marshaliere ich einen privaten PKCS8-Schlüssel in Go 1.5?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn