github.com/StackPointCloud/packer@v0.10.2-0.20180716202532-b28098e0f79b/builder/azure/common/randomstring.go (about) 1 package common 2 3 import ( 4 "math/rand" 5 "os" 6 "time" 7 ) 8 9 var pwSymbols = []string{ 10 "abcdefghijklmnopqrstuvwxyz", 11 "ABCDEFGHIJKLMNOPQRSTUVWXYZ", 12 "0123456789", 13 } 14 15 var rnd = rand.New(rand.NewSource(time.Now().UnixNano() + int64(os.Getpid()))) 16 17 func RandomString(chooseFrom string, length int) (randomString string) { 18 cflen := len(chooseFrom) 19 for i := 0; i < length; i++ { 20 randomString += string(chooseFrom[rnd.Intn(cflen)]) 21 } 22 return 23 } 24 25 func RandomPassword() (password string) { 26 pwlen := 15 27 batchsize := pwlen / len(pwSymbols) 28 pw := make([]byte, 0, pwlen) 29 // choose character set 30 for c := 0; len(pw) < pwlen; c++ { 31 s := RandomString(pwSymbols[c%len(pwSymbols)], rnd.Intn(batchsize-1)+1) 32 pw = append(pw, []byte(s)...) 33 } 34 // truncate 35 pw = pw[:pwlen] 36 37 // permute 38 for c := 0; c < pwlen-1; c++ { 39 i := rnd.Intn(pwlen-c) + c 40 x := pw[c] 41 pw[c] = pw[i] 42 pw[i] = x 43 } 44 return string(pw) 45 }