Rumah >pembangunan bahagian belakang >Golang >Cara Menjana Kunci RSA dalam Go: Setara dengan `genrsa` OpenSSL?
Masalah:
Mencipta pasangan kunci RSA dan mengekstrak awam kunci boleh menjadi tugas biasa dalam kriptografi. Utiliti genrsa OpenSSL menyediakan cara yang mudah untuk mencapai ini. Walau bagaimanapun, bagaimanakah kita boleh mencapai kefungsian yang sama menggunakan Go?
Penyelesaian:
Untuk menjana dan mengekstrak komponen utama RSA dalam Go, anda boleh mengikuti langkah berikut:
1. Hasilkan Pasangan Kunci RSA
rsa.GenerateKey boleh digunakan untuk mencipta pasangan kunci RSA. Fungsi ini mengambil sumber *rand.Rand sebagai input.
2. Ekstrak Kunci Awam
Untuk mendapatkan komponen awam daripada kunci persendirian, gunakan rsa.PrivateKey.Public. Ia akan mengembalikan antara muka rsa.PublicKey.
3. Tukar kepada Format PEM PKCS#1
Kedua-dua kunci peribadi dan awam mesti ditukar kepada borang PKCS#1 ASN.1 DER. Gunakan x509.MarshalPKCS1PrivateKey dan x509.MarshalPKCS1PublicKey untuk tujuan ini.
4. Pengekodan ke Blok PEM
Pengekodan PEM digunakan untuk membalut kunci yang ditukar dalam blok PEM yang boleh dikenali. pem.EncodeToMemory boleh mencapai ini.
5. Tulis Output pada Fail
Langkah terakhir melibatkan menulis kunci peribadi dan awam untuk memisahkan fail.
Contoh:
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) } }
Contoh ini akan menghasilkan dua fail: key.rsa (kunci peribadi) dan key.rsa.pub (kunci awam).
Atas ialah kandungan terperinci Cara Menjana Kunci RSA dalam Go: Setara dengan `genrsa` OpenSSL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!