Maison >développement back-end >Golang >Comment générer des clés RSA dans Go : de manière équivalente au « genrsa » d'OpenSSL ?
Problème :
Création de paires de clés RSA et extraction de clés publiques les clés peuvent être une tâche courante en cryptographie. L'utilitaire genrsa d'OpenSSL fournit un moyen pratique d'y parvenir. Cependant, comment pouvons-nous obtenir la même fonctionnalité en utilisant Go ?
Solution :
Pour générer et extraire les composants clés RSA dans Go, vous pouvez suivre ces étapes :
1. Générer une paire de clés RSA
rsa.GenerateKey peut être utilisé pour créer une paire de clés RSA. Cette fonction prend une source *rand.Rand en entrée.
2. Extraire la clé publique
Pour obtenir le composant public à partir de la clé privée, utilisez rsa.PrivateKey.Public. Il renverra une interface rsa.PublicKey.
3. Convertir au format PKCS#1 PEM
Les clés privées et publiques doivent être converties au format PKCS#1 ASN.1 DER. Utilisez x509.MarshalPKCS1PrivateKey et x509.MarshalPKCS1PublicKey à cet effet.
4. Encoder en blocs PEM
Le codage PEM est utilisé pour envelopper les clés converties dans des blocs PEM reconnaissables. pem.EncodeToMemory peut y parvenir.
5. Écrire la sortie dans des fichiers
La dernière étape consiste à écrire les clés privées et publiques dans des fichiers séparés.
Exemple :
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) } }
Cet exemple générera deux fichiers : key.rsa (clé privée) et key.rsa.pub (clé publique).
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!