请注意,一个公钥可以对应多个私钥
package main import ( "crypto/rand" "crypto/rsa" "crypto/x509" "encoding/pem" "fmt" "log" "os" ) func main() { // 生成 RSA 密钥对 privateKey, err := rsa.GenerateKey(rand.Reader, 2048) if err != nil { log.Fatalf("无法生成私钥:%v", err) } // 从私钥中导出公钥 publicKey := &privateKey.PublicKey // 将私钥编码为 PEM 格式 privateKeyPem := &pem.Block{ Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(privateKey), } // 将公钥编码为 PEM 格式 publicKeyBytes, err := x509.MarshalPKIXPublicKey(publicKey) if err != nil { log.Fatalf("无法导出公钥:%v", err) } publicKeyPem := &pem.Block{ Type: "PUBLIC KEY", Bytes: publicKeyBytes, } // 将私钥和公钥写入文件 privateKeyFile, err := os.Create("private.pem") if err != nil { log.Fatalf("无法创建私钥文件:%v", err) } defer privateKeyFile.Close() pem.Encode(privateKeyFile, privateKeyPem) publicKeyFile, err := os.Create("public.pem") if err != nil { log.Fatalf("无法创建公钥文件:%v", err) } defer publicKeyFile.Close() pem.Encode(publicKeyFile, publicKeyPem) fmt.Println("公钥和私钥已生成并保存到 public.pem 和 private.pem 文件中。") }