package union_pay import ( "encoding/base64" "fmt" "github.com/tjfoc/gmsm/sm4" ) func Encrypt(txt, key, iv []byte) (string, error) { pk := HexToBytes(key) err := sm4.SetIV(iv) if err != nil { return "", fmt.Errorf("sm4.SetIV err:%v", err) } cipherTxt, err := sm4.Sm4Cbc(pk, txt, true) if err != nil { return "", fmt.Errorf("sm4.Sm4Cbc err:%v", err) } return base64.StdEncoding.EncodeToString(cipherTxt), nil } func Decrypt(txt string, key []byte, iv []byte) (string, error) { plainText, err := base64.StdEncoding.DecodeString(txt) if err != nil { return "", fmt.Errorf("base64.StdEncoding.DecodeString err:%v", err) } pk := HexToBytes(key) err = sm4.SetIV(iv) if err != nil { return "", fmt.Errorf("sm4.SetIV err:%v", err) } cipherTxt, err := sm4.Sm4Cbc(pk, plainText, false) if err != nil { return "", fmt.Errorf("sm4.Sm4Cbc err:%v", err) } return string(cipherTxt), nil }