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 }