代码之家  ›  专栏  ›  技术社区  ›  Invictus

从私钥中提取公钥

  •  1
  • Invictus  · 技术社区  · 6 年前

    1. openssl genrsa -out signing.pem 2048
    2. openssl rsa -in signing.pem -outform PEM -pubout -out signing.pub.pem
    

    下面是一个简单的函数,它读取私钥并尝试提取公钥。

    谢谢

       func main() {
        priv, err := ioutil.ReadFile("signing.pem")
    
        block, _ := pem.Decode([]byte(priv))
        if block == nil || block.Type != "RSA PRIVATE KEY" {
            log.Fatal("failed to decode PEM block containing public key")
        }
        key, err := x509.ParsePKCS1PrivateKey(block.Bytes)
        if err != nil {
            log.Fatal(err)
        }
    
        publicKeyDer := x509.MarshalPKCS1PublicKey(&pub.PublicKey)
        pubKeyBlock := pem.Block{
            Type:    "PUBLIC KEY",
            Headers: nil,
            Bytes:   publicKeyDer,
        }
        pubKeyPem := string(pem.EncodeToMemory(&pubKeyBlock))
        fmt.Println(pubKeyPem)
    }
    

    如果有人想查看代码并四处玩,请点击以下链接:

    https://play.golang.org/p/rKerkh-31KI

    1 回复  |  直到 6 年前
        1
  •  4
  •   ssemilla    6 年前

    使用 MarshalPKIXPublicKey

    publicKeyDer, err := x509.MarshalPKIXPublicKey(&key.PublicKey)
    if err != nil {
        log.Fatal(err)
    }
    

    publicKeyDer := x509.MarshalPKCS1PublicKey(&key.PublicKey)
    

    Playground