github.com/872409/go-netease-im@v1.0.2-0.20201109080841-fdb3e13691c5/utils.go (about) 1 package netease 2 3 import ( 4 "crypto/md5" 5 "crypto/sha1" 6 "encoding/hex" 7 "math/rand" 8 "strings" 9 "time" 10 ) 11 12 const letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" 13 const ( 14 letterIdxBits = 6 // 6 bits to represent a letter index 15 letterIdxMask = 1<<letterIdxBits - 1 // All 1-bits, as many as letterIdxBits 16 letterIdxMax = 63 / letterIdxBits // # of letter indices fitting in 63 bits 17 ) 18 19 var src = rand.NewSource(time.Now().UnixNano()) 20 21 func init() { 22 rand.Seed(time.Now().UTC().UnixNano()) 23 } 24 25 // RandStringBytesMaskImprSrc . 26 func RandStringBytesMaskImprSrc(n int) string { 27 b := make([]byte, n) 28 // A src.Int63() generates 63 random bits, enough for letterIdxMax characters! 29 for i, cache, remain := n-1, src.Int63(), letterIdxMax; i >= 0; { 30 if remain == 0 { 31 cache, remain = src.Int63(), letterIdxMax 32 } 33 if idx := int(cache & letterIdxMask); idx < len(letterBytes) { 34 b[i] = letterBytes[idx] 35 i-- 36 } 37 cache >>= letterIdxBits 38 remain-- 39 } 40 41 return string(b) 42 } 43 44 // RandNumber . 45 func RandNumber(min, max int) int { 46 return min + rand.Intn(max-min) 47 } 48 49 // ShaHashToHexString SHA1加密字符串,并将加密结果转成16进制字符串 50 func ShaHashToHexString(bv []byte) string { 51 hasher := sha1.New() 52 hasher.Write(bv) 53 return strings.ToLower(hex.EncodeToString(hasher.Sum(nil))) 54 } 55 56 // ShaHashToHexStringFromString . 57 func ShaHashToHexStringFromString(src string) string { 58 return ShaHashToHexString([]byte(src)) 59 } 60 61 // Md5HashToHexString . 62 func Md5HashToHexString(bv []byte) string { 63 hasher := md5.New() 64 hasher.Write(bv) 65 return strings.ToLower(hex.EncodeToString(hasher.Sum(nil))) 66 }