go RSA PKCS8

RAS在線生成:http://www.metools.info/code/c80.html

PKCS#8 類型

package main

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

var publicKey = []byte(`
-----BEGIN PUBLIC KEY-----
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAM8UxlNEntcW3ISGpzCuUFSIu/vkzo36
gDO7ZXri6CpyLwlKZ3GT/6j/CgR6JRpZYS3HxB2ykO1kfi6DKldkvPcCAwEAAQ==
-----END PUBLIC KEY-----

`)

var privateKey = []byte(`
-----BEGIN PRIVATE KEY-----
MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEAzxTGU0Se1xbchIan
MK5QVIi7++TOjfqAM7tleuLoKnIvCUpncZP/qP8KBHolGllhLcfEHbKQ7WR+LoMq
V2S89wIDAQABAkA3B8ZMiofLkP+5GC+F+EzQqiWKoxthD5jSJpKpPXOFE6ib1u4M
u9/5CzgpDi2R+75skCb+g+uWtrGVFm2dbfPBAiEA59EPqb8Iq6NIbKAeAC2g+LRw
j0dy0JvkW6P5ntjG1L0CIQDkrx9ugORG5a5dmAH4eN81MuxhMGZojiUdE4hyY/0F
wwIgZbchvEWKNGWM3bzT7RgYTYg+619aTZZZeKxWVxCfDbECIE995GIoIbHXUxYr
qbuyYHyAmBRsm5yKlLIXwR1qTmC7AiAqD7kc2TqtKuCL/4Uxr/9m+4Z/UmamPaUe
KhtsmatceQ==
-----END PRIVATE KEY-----

`)

func main() {
	data, err := RsaEncrypt([]byte("Demo\n1611310969\n24212"))
	if err != nil {
		panic(err)
	}
	fmt.Println("加密數據:",base64.StdEncoding.EncodeToString(data))

	origData, err := RsaDecrypt(data)
	if err != nil {
		panic(err)
	}
	fmt.Println("解密數據:",string(origData))
}

// 加密
func RsaEncrypt(origData []byte) ([]byte, error) {
	block, _ := pem.Decode(publicKey)
	if block == nil {
		return nil, errors.New("public key error")
	}
	pubInterface, err := x509.ParsePKIXPublicKey(block.Bytes)
	if err != nil {
		return nil, err
	}
	pub := pubInterface.(*rsa.PublicKey)
	return rsa.EncryptPKCS1v15(rand.Reader, pub, origData)
}

//解密
func RsaDecrypt(ciphertext []byte) ([]byte, error) {
	block, _ := pem.Decode(privateKey)
	if block == nil {
		return nil, errors.New("private key error!")
	}
	parseResult, err := x509.ParsePKCS8PrivateKey(block.Bytes)
	if err != nil {
		return nil, errors.New("parse error!")
	}
	priv := parseResult.(*rsa.PrivateKey)
	return rsa.DecryptPKCS1v15(rand.Reader, priv, ciphertext)
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章