首頁 > 後端開發 > Golang > 如何在 Go 中產生 RSA 金鑰:相當於 OpenSSL 的「genrsa」?

如何在 Go 中產生 RSA 金鑰:相當於 OpenSSL 的「genrsa」?

Mary-Kate Olsen
發布: 2024-12-07 17:43:12
原創
204 人瀏覽過

How to Generate RSA Keys in Go: Equivalently to OpenSSL's `genrsa`?

在Go 中產生RSA 金鑰:與OpenSSL 的genrsa 實用程式等效

問題:

問題:

。密鑰對並提取公共密鑰密鑰是密碼學中的常見任務。 OpenSSL 的 genrsa 實用程式提供了一種方便的方法來實現此目的。但是,我們如何使用 Go 來實現相同的功能?

解決方案:

要在 Go 中產生和提取 RSA 密鑰組件,可以按照以下步驟操作:

1。產生 RSA 金鑰對

rsa.GenerateKey 可用於建立 RSA 金鑰對。此函數採用 *rand.Rand 來源作為輸入。

2.提取公鑰

要從私鑰取得公共部分,請使用 rsa.PrivateKey.Public。它將傳回 rsa.PublicKey 介面。

3.轉換為 PKCS#1 PEM 格式

私鑰和公鑰都必須轉換為 PKCS#1 ASN.1 DER 形式。為此目的,請使用 x509.MarshalPKCS1PrivateKey 和 x509.MarshalPKCS1PublicKey。

4.編碼為 PEM 區塊

PEM 編碼用於將轉換後的密鑰包裝在可識別的 PEM 區塊中。 pem.EncodeToMemory 可以實現這一點。

5.將輸出寫入檔案

最後一步是將私鑰和公鑰寫入單獨的檔案。

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)
    }
}
登入後複製
範例:

此範例將產生兩個檔案:key.rsa(私鑰)和 key.rsa.pub(公鑰)。

以上是如何在 Go 中產生 RSA 金鑰:相當於 OpenSSL 的「genrsa」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板