...
1 package randomizer
2
3 import (
4 "crypto/rand"
5 "math/big"
6 )
7
8 var (
9 ValidChars = []rune("$~!@#%^&*_-+=`|(){}[]:;'<>,.?0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
10 validSaltChars = []rune("./0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
11 ActivationChars = []rune("23456789ABCDEFGHJKLMNPQRSTUVWXYZ")
12 )
13
14
15 func GenerateRandomSalt(length int) (string, error) {
16 salt := make([]rune, length)
17 for i := 0; i < length; i++ {
18 letterIndex, err := rand.Int(rand.Reader, big.NewInt(int64(len(validSaltChars))))
19 if err != nil {
20 return "", err
21 }
22 salt[i] = validSaltChars[letterIndex.Int64()]
23 }
24 return string(salt), nil
25 }
26
27 func GenerateRandomBytes(n int) ([]byte, error) {
28 b := make([]byte, n)
29 if _, err := rand.Read(b); err != nil {
30 return nil, err
31 }
32 return b, nil
33 }
34
35
36 func GenerateRandomPlainPwd(pwdLength int) (string, error) {
37 return generateRandomPhrase(ValidChars, pwdLength)
38 }
39
40
41 func RandomPassLength(minLength, maxLength int) (int, error) {
42 pwdLen, err := rand.Int(rand.Reader, big.NewInt(int64(maxLength-minLength)))
43 if err != nil {
44 return -1, err
45 }
46 return int(pwdLen.Int64()) + maxLength, nil
47 }
48
49
50 func GenerateRandomActivationCode(length int) (string, error) {
51 return generateRandomPhrase(ActivationChars, length)
52 }
53
54 func generateRandomPhrase(letters []rune, phraseLength int) (string, error) {
55 length := int64(len(letters))
56 chars := make([]rune, phraseLength)
57 for i := range chars {
58 letterIndex, err := rand.Int(rand.Reader, big.NewInt(length))
59 if err != nil {
60 return "", err
61 }
62 chars[i] = letters[letterIndex.Int64()]
63 }
64 return string(chars), nil
65 }
66
View as plain text