ホームページ >バックエンド開発 >Golang >Go で RSA キー ペアを生成する方法: OpenSSL との比較?

Go で RSA キー ペアを生成する方法: OpenSSL との比較?

DDD
DDDオリジナル
2024-12-10 06:50:14239ブラウズ

How to Generate RSA Key Pairs in Go: A Comparison with OpenSSL?

Go および Openssl 相当物を使用した RSA キーの生成

Openssl コマンドについて

提供された OpenSSL コマンドは RSA キーを生成します秘密鍵と公開鍵をペアにして別々のファイルに保存します。 2 つの引数を取ります:

  • $1: キー ファイルの名前 (例: "key.rsa")
  • $2: RSA キーのビット単位のサイズ (例: 4096)

で実装Go

Go でこの機能を複製するには、次の手順を実行する必要があります。

  1. RSA キー ペアを生成する
  2. 公開キー コンポーネントを抽出する
  3. キーを PKCS#1 ASN.1 DER に変換します形式
  4. PEM ブロックにエンコードします
  5. キーをファイルに書き込みます

Go Code:

package main

import (
    "crypto/rand"
    "crypto/rsa"
    "crypto/x509"
    "encoding/pem"
    "fmt"
    "io/ioutil"
)

func main() {
    // Define filename and bit size
    filename := "key"
    bitSize := 4096

    // Generate RSA key
    key, err := rsa.GenerateKey(rand.Reader, bitSize)
    if err != nil {
        panic(err)
    }

    // Extract public key
    pub := key.Public()

    // Convert to PKCS#1 DER format
    keyPEM := pem.EncodeToMemory(
        &pem.Block{
            Type:  "RSA PRIVATE KEY",
            Bytes: x509.MarshalPKCS1PrivateKey(key),
        },
    )

    pubPEM := pem.EncodeToMemory(
        &pem.Block{
            Type:  "RSA PUBLIC KEY",
            Bytes: x509.MarshalPKCS1PublicKey(pub.(*rsa.PublicKey)),
        },
    )

    // Write keys to files
    err = ioutil.WriteFile(filename+".rsa", keyPEM, 0700)
    if err != nil {
        panic(err)
    }

    err = ioutil.WriteFile(filename+".rsa.pub", pubPEM, 0755)
    if err != nil {
        panic(err)
    }

    fmt.Println("RSA key pair generated and written to files.")
}

出力:

プログラムは次のようになります。次の内容の 2 つのファイルを作成します:

key.rsa:

-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----

key.rsa.pub:

-----BEGIN RSA PUBLIC KEY-----
...
-----END RSA PUBLIC KEY-----

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

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