plugins/utils/union_pay/sm4.go

42 lines
913 B
Go

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
}