ホームページ >バックエンド開発 >Golang >Go で RSA キーを生成する方法: OpenSSL の「genrsa」と同等?

Go で RSA キーを生成する方法: OpenSSL の「genrsa」と同等?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-07 17:43:12199ブラウズ

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

Go での RSA キーの生成: OpenSSL の genrsa ユーティリティと同等

問題:

RSA キー ペアの作成とパブリック キーの抽出キーは暗号化において一般的なタスクとなる場合があります。 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 (公開鍵) の 2 つのファイルを生成します。

以上がGo で RSA キーを生成する方法: OpenSSL の「genrsa」と同等?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。