package util import ( "crypto/md5" "crypto/rand" "encoding/hex" "math/big" "strings" "time" ) func GenerateSM4Key() []byte { str := "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890" buffer := make([]byte, 16) for i := 0; i < 16; i++ { nextInt, _ := rand.Int(rand.Reader, big.NewInt(int64(len(str)))) buffer[i] = str[nextInt.Int64()] } return buffer } func GenAccessToken(token string) string { if token != "" { return token } now := time.Now() return strings.ToUpper(Md5Hash(now.Format("2006A01B02CD15E04F05"), "")) } func Md5Hash(password, salt string) string { m := md5.New() m.Write([]byte(salt + password)) return hex.EncodeToString(m.Sum(nil)) } // GetSM4IV 获取SM4的IV func GetSM4IV() []byte { return []byte("UISwD9fW6cFh9SNS") } func Padding(input []byte, mode int) []byte { if input == nil { return nil } else { var ret []byte if mode == 1 { p := 16 - len(input)%16 ret = make([]byte, len(input)+p) copy(ret, input) for i := 0; i < p; i++ { ret[len(input)+i] = byte(p) } } else { p := input[len(input)-1] ret = make([]byte, len(input)-int(p)) copy(ret, input[:len(input)-int(p)]) } return ret } }