package toolm import ( "crypto/hmac" "crypto/sha256" "fmt" "math/rand" "time" ) const ( CharsAll = 1 << iota Digit LowerCase UpperCase ) const ( digit = "0123456789" lowercase = "abcdefghijklmnopqrstuvwxyz" uppercase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" //octal = "01234567" //hex = "0123456789abcdefg" ) func RandString(l, chars int) string { charset := "" if chars&CharsAll > 0 { charset = digit + lowercase + uppercase } charsetLen := len(charset) seededRand := rand.New(rand.NewSource(time.Now().UnixNano())) b := make([]byte, l) for i := range b { b[i] = charset[seededRand.Intn(charsetLen)] } return string(b) } func Sha256HMacString(message, key string) string { mac := hmac.New(sha256.New, []byte(key)) mac.Write([]byte(message)) expectedMAC := mac.Sum(nil) return fmt.Sprintf("%X", expectedMAC) }