package utils import ( "crypto/md5" cryptoRand "crypto/rand" "encoding/hex" "fmt" "github.com/dchest/captcha" "io" "math/rand" "strings" "time" ) func FilterXSS(str string) string { str = strings.Replace(str, "<", "<", -1) str = strings.Replace(str, ">", ">", -1) str = strings.Replace(str, "%3C", "<", -1) str = strings.Replace(str, "%3E", ">", -1) str = strings.Replace(str, "expression", "expression", -1) str = strings.Replace(str, "javascript", "javascript", -1) return str } func MakeSimpleCaptcha(n int) string { var idChars = []byte("0123456789") b := captcha.RandomDigits(n) for i, c := range b { b[i] = idChars[c] } return string(b) } /** 获取当前时间的毫秒值 */ func Now4Millis() int64 { return time.Now().UnixNano() / 1e6 } /*产生n以内的随机数*/ func MakeIntRand(n int) int { rand.Seed(time.Now().UnixNano()) return rand.Intn(n) } //生成32位md5字串 func GetMd5String(s string) string { h := md5.New() h.Write([]byte(s)) return hex.EncodeToString(h.Sum(nil)) } func GenerateSimpleToken() string { rand.Seed(time.Now().UnixNano()) str := fmt.Sprintf("%d%d", time.Now().UnixNano(), rand.Intn(999999)) h := md5.New() h.Write([]byte(str)) return hex.EncodeToString(h.Sum(nil)) } //var pool = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz@#$" //获取复杂的随机数 func GetLetterRandom(length int, flag ...bool) string { var idChars = []byte("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz") var mod byte = 52 if len(flag) > 0 && flag[0] { idChars = []byte("ABCDEFGHIJKLMNOPQRSTUVWXYZ") mod = 26 } b := make([]byte, length) maxrb := byte(256 - (256 % int(mod))) i := 0 EXIT: for { r := make([]byte, length+(length/4)) if _, err := io.ReadFull(cryptoRand.Reader, r); err != nil { panic("GetLetterRandom: error reading random source: " + err.Error()) } for _, c := range r { if c > maxrb { continue } b[i] = c % mod i++ if i == length { break EXIT } } } for i, c := range b { b[i] = idChars[c] } return string(b) } /*获取复杂的随机数,数字和字母的组合 * c > 2 数字的个数和字母的个数随机分配 * n 数字的个数 * l 字母的个数 */ func GetComplexRandom(c, n, l int) string { if c < 2 && (n < 1 || l < 1) { return "--" } r := rand.New(rand.NewSource(time.Now().UnixNano())) myCommonMethod := func(flag bool) int { if flag { return r.Intn(c-1) + 1 } else { return r.Intn(c) } } if c >= 2 { n = myCommonMethod(true) l = c - n } else { c = l + n } value := MakeSimpleCaptcha(n) + GetLetterRandom(l) var array = strings.Split(value, "") for i := 0; i < c/2; i++ { r1 := myCommonMethod(false) r2 := myCommonMethod(false) o := array[r1] array[r1] = array[r2] array[r2] = o } return strings.Join(array, "") }