|
|
- package crypter
-
- import (
- "encoding/hex"
- "errors"
- "log"
- "strings"
-
- "crypto/rand"
-
- "fmt"
-
- "github.com/tjfoc/gmsm/sm2"
- "github.com/tjfoc/gmsm/x509"
- )
-
- func Sm2EncryptWithHexKey(message string, public_key string) (string, error) {
-
- sm2PubKey, err := x509.ReadPublicKeyFromHex(public_key)
- if err != nil {
- fmt.Println("Error parsing SM2 public key:", err)
- return "", err
- }
-
- // 待加密的数据
- data := []byte(message)
-
- // 使用SM2公钥加密数据
- ciphertext, err := sm2.Encrypt(sm2PubKey, data, rand.Reader, sm2.C1C3C2)
- if err != nil {
- log.Println("Error encrypting data with SM2:", err)
- return "", errors.New("Error encrypting data with SM2," + err.Error())
- }
-
- if err != nil {
- log.Println("Error encrypting data with SM2:", err)
- return "", errors.New("Error encrypting data with SM2")
- }
-
- return hex.EncodeToString(ciphertext), nil
- // return base64.StdEncoding.EncodeToString(ciphertext), nil
-
- }
-
- func Sm2DecryptWithHexKey(message string, private_key string) (string, error) {
-
- sm2PriKey, err := x509.ReadPrivateKeyFromHex(private_key)
- if err != nil {
- fmt.Println("Error parsing SM2 private key:", err)
- return "", err
- }
- // 待加密的数据
- data, err := hex.DecodeString(message) //base64.StdEncoding.DecodeString(message) //
- if err != nil {
- fmt.Println("Error base64 message:", err)
- return "", err
- }
-
- // 使用SM2私钥加密数据
- ciphertext, err := sm2.Decrypt(sm2PriKey, data, sm2.C1C3C2)
- if err != nil {
- log.Println("Error decrypting data with SM2:", err)
- return "", errors.New("Error encrypting data with SM2:" + err.Error())
- }
-
- return string(ciphertext), nil
-
- }
-
- func CreateHexKey() (string, string, error) {
- // 生成SM2密钥对
- priv, err := sm2.GenerateKey(rand.Reader)
- if err != nil {
- return "", "", err
- }
- // 将私钥转换为PEM格式的字符串
- privPem := x509.WritePrivateKeyToHex(priv)
-
- pubPem := x509.WritePublicKeyToHex(priv.Public().(*sm2.PublicKey))
-
- return strings.ToUpper(privPem), strings.ToUpper(pubPem), err
- }
|