Problem:
Erstellen von RSA-Schlüsselpaaren und Extrahieren von öffentlichen Schlüssel können eine häufige Aufgabe in der Kryptographie sein. Das genrsa-Dienstprogramm von OpenSSL bietet eine praktische Möglichkeit, dies zu erreichen. Wie können wir jedoch mit Go die gleiche Funktionalität erreichen?
Lösung:
Um RSA-Schlüsselkomponenten in Go zu generieren und zu extrahieren, können Sie die folgenden Schritte ausführen:
1. Generieren Sie ein RSA-Schlüsselpaar
rsa.GenerateKey kann zum Erstellen eines RSA-Schlüsselpaars verwendet werden. Diese Funktion verwendet eine *rand.Rand-Quelle als Eingabe.
2. Extrahieren Sie den öffentlichen Schlüssel
Um die öffentliche Komponente aus dem privaten Schlüssel zu erhalten, verwenden Sie rsa.PrivateKey.Public. Es wird eine rsa.PublicKey-Schnittstelle zurückgegeben.
3. Konvertieren in das PKCS#1-PEM-Format
Sowohl private als auch öffentliche Schlüssel müssen in das PKCS#1-ASN.1-DER-Format konvertiert werden. Verwenden Sie zu diesem Zweck x509.MarshalPKCS1PrivateKey und x509.MarshalPKCS1PublicKey.
4. In PEM-Blöcke kodieren
PEM-Kodierung wird verwendet, um die konvertierten Schlüssel in erkennbare PEM-Blöcke zu verpacken. pem.EncodeToMemory kann dies erreichen.
5. Ausgabe in Dateien schreiben
Der letzte Schritt besteht darin, die privaten und öffentlichen Schlüssel in separate Dateien zu schreiben.
Beispiel:
package main import ( "crypto/rand" "crypto/rsa" "crypto/x509" "encoding/pem" "io/ioutil" ) func main() { filename := "key" bitSize := 4096 // Generate RSA key pair. key, err := rsa.GenerateKey(rand.Reader, bitSize) if err != nil { panic(err) } // Extract public component. pub := key.Public() // Encode private key to PKCS#1 PEM. keyPEM := pem.EncodeToMemory( &pem.Block{ Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(key), }, ) // Encode public key to PKCS#1 PEM. pubPEM := pem.EncodeToMemory( &pem.Block{ Type: "RSA PUBLIC KEY", Bytes: x509.MarshalPKCS1PublicKey(pub.(*rsa.PublicKey)), }, ) // Write private key to file. if err := ioutil.WriteFile(filename+".rsa", keyPEM, 0700); err != nil { panic(err) } // Write public key to file. if err := ioutil.WriteFile(filename+".rsa.pub", pubPEM, 0755); err != nil { panic(err) } }
In diesem Beispiel werden zwei Dateien generiert: key.rsa (privater Schlüssel) und key.rsa.pub (öffentlicher Schlüssel).
Das obige ist der detaillierte Inhalt vonSo generieren Sie RSA-Schlüssel in Go: Äquivalent zu „genrsa' von OpenSSL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!