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  }