扫描二维码下载沐宇APP

沐宇

微信扫码使用沐宇小程序

沐宇

golang涓璻sa鍔犲瘑鎬庝箞瀹炵幇

扬州沐宇科技
2024-01-09 17:40:58
golang

鍦℅olang涓紝鍙互浣跨敤crypto/rsa鍖呮潵瀹炵幇RSA鍔犲瘑銆備笅闈㈡槸涓€涓畝鍗曠殑绀轰緥浠g爜锛?/p>

package main

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

func main() {
	// 鐢熸垚RSA瀵嗛挜瀵?/span>
	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)

	// 瑙e瘑鏁版嵁
	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))
}

鍦ㄤ笂闈㈢殑绀轰緥浠g爜涓紝棣栧厛鐢熸垚浜嗕竴涓?048浣嶇殑RSA瀵嗛挜瀵广€傜劧鍚庯紝灏嗙閽ヤ繚瀛樹负PEM鏍煎紡锛屽苟鎵撳嵃鍑烘潵銆傛帴鐫€锛屽皢鍏挜淇濆瓨涓篜EM鏍煎紡锛屽苟鎵撳嵃鍑烘潵銆?/p>

鐒跺悗锛屼娇鐢ㄥ叕閽ュ鏁版嵁杩涜鍔犲瘑锛岃緭鍑哄姞瀵嗗悗鐨勫瘑鏂囥€傛渶鍚庯紝浣跨敤绉侀挜瀵瑰瘑鏂囪繘琛岃В瀵嗭紝杈撳嚭瑙e瘑鍚庣殑鏄庢枃銆?/p>

娉ㄦ剰锛氬湪瀹為檯搴旂敤涓紝闇€瑕佸Ε鍠勪繚绠$閽ワ紝閬垮厤绉侀挜娉勯湶銆?/p>

扫码添加客服微信