Go言語でRSA暗号を実装する方法は何ですか?

Golangで、RSA暗号化を実装するためにcrypto/rsaパッケージを使用することができます。以下は簡単なサンプルコードです。

package main

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

func main() {
	// 生成RSA密钥对
	privateKey, err := rsa.GenerateKey(rand.Reader, 2048)
	if err != nil {
		fmt.Println("Failed to generate RSA key pair:", err)
		return
	}

	// 将私钥保存为PEM格式
	privateKeyPem := &pem.Block{
		Type:  "RSA PRIVATE KEY",
		Bytes: x509.MarshalPKCS1PrivateKey(privateKey),
	}
	privateKeyPemBytes := pem.EncodeToMemory(privateKeyPem)
	fmt.Println("Private key (PEM format):")
	fmt.Println(string(privateKeyPemBytes))

	// 将公钥保存为PEM格式
	publicKey := &privateKey.PublicKey
	publicKeyDer, err := x509.MarshalPKIXPublicKey(publicKey)
	if err != nil {
		fmt.Println("Failed to convert public key to DER format:", err)
		return
	}
	publicKeyPem := &pem.Block{
		Type:  "PUBLIC KEY",
		Bytes: publicKeyDer,
	}
	publicKeyPemBytes := pem.EncodeToMemory(publicKeyPem)
	fmt.Println("Public key (PEM format):")
	fmt.Println(string(publicKeyPemBytes))

	// 加密数据
	plainText := []byte("Hello, RSA encryption!")
	cipherText, err := rsa.EncryptPKCS1v15(rand.Reader, publicKey, plainText)
	if err != nil {
		fmt.Println("Failed to encrypt data:", err)
		return
	}
	fmt.Println("Cipher text:")
	fmt.Println(cipherText)

	// 解密数据
	decryptedText, err := rsa.DecryptPKCS1v15(rand.Reader, privateKey, cipherText)
	if err != nil {
		fmt.Println("Failed to decrypt data:", err)
		return
	}
	fmt.Println("Decrypted text:")
	fmt.Println(string(decryptedText))
}

上記のサンプルコードでは、ますます2048ビットのRSA鍵を生成しました。その後、秘密鍵をPEM形式で保存し、表示しました。その後、公開鍵をPEM形式で保存し、表示しました。

その後、データを公開鍵で暗号化し、暗号化された暗号文を出力します。最後に、その暗号文を秘密鍵で復号化し、復号化された平文を出力します。

注意:実際の使用時には、秘密鍵を適切に保管し、秘密鍵の漏洩を防ぐ必要があります。

bannerAds