65 lines
1.5 KiB
Go
65 lines
1.5 KiB
Go
package passgen
|
|||
|
|
|
||
|
|
import (
|
||
|
|
"crypto/rand"
|
||
|
|
"math/big"
|
||
|
|
)
|
||
|
|
|
||
|
|
var (
|
||
|
|
ar = []rune("aA4")
|
||
|
|
cr = []rune("cC")
|
||
|
|
er = []rune("eE3")
|
||
|
|
fr = []rune("fF")
|
||
|
|
gr = []rune("gG")
|
||
|
|
hr = []rune("hH")
|
||
|
|
ir = []rune("iI1")
|
||
|
|
lr = []rune("lL")
|
||
|
|
nr = []rune("nN")
|
||
|
|
or = []rune("oO0")
|
||
|
|
rr = []rune("rR")
|
||
|
|
sr = []rune("sS5")
|
||
|
|
tr = []rune("tT7")
|
||
|
|
remr = []rune("bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ0123456789")
|
||
|
|
)
|
||
|
|
|
||
|
|
// NewWordish generates a password made of word-like words.
|
||
|
|
func NewWordish() string {
|
||
|
|
b := []rune{}
|
||
|
|
b = append(b, randLetter(cr))
|
||
|
|
b = append(b, randLetter(hr))
|
||
|
|
b = append(b, randLetter(ar))
|
||
|
|
b = append(b, randLetter(nr))
|
||
|
|
b = append(b, randLetter(gr))
|
||
|
|
b = append(b, randLetter(er))
|
||
|
|
b = append(b, randLetter(tr))
|
||
|
|
b = append(b, randLetter(hr))
|
||
|
|
b = append(b, randLetter(ir))
|
||
|
|
b = append(b, randLetter(sr))
|
||
|
|
b = append(b, randLetter(ar))
|
||
|
|
b = append(b, randLetter(fr))
|
||
|
|
b = append(b, randLetter(tr))
|
||
|
|
b = append(b, randLetter(er))
|
||
|
|
b = append(b, randLetter(rr))
|
||
|
|
b = append(b, randLetter(lr))
|
||
|
|
b = append(b, randLetter(or))
|
||
|
|
b = append(b, randLetter(gr))
|
||
|
|
b = append(b, randLetter(gr))
|
||
|
|
b = append(b, randLetter(ir))
|
||
|
|
b = append(b, randLetter(nr))
|
||
|
|
b = append(b, randLetter(gr))
|
||
|
|
b = append(b, randLetter(ir))
|
||
|
|
b = append(b, randLetter(nr))
|
||
|
|
for i := 0; i <= 7; i++ {
|
||
|
|
b = append(b, randLetter(remr))
|
||
|
|
}
|
||
|
|
return string(b)
|
||
|
|
}
|
||
|
|
|
||
|
|
func randLetter(l []rune) rune {
|
||
|
|
li, err := rand.Int(rand.Reader, big.NewInt(int64(len(l))))
|
||
|
|
if err != nil {
|
||
|
|
return rune(-1)
|
||
|
|
}
|
||
|
|
return l[li.Int64()]
|
||
|
|
}
|