1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
| package main
import ( "crypto/rand" "fmt" )
func generatePassword() (string, error) { lowercase := "abcdefghijklmnopqrstuvwxyz" uppercase := "ABCDEFGHIJKLMNOPQRSTUVWXYZ" digits := "0123456789" specialChars := "!@#$%^&*()" allChars := lowercase + uppercase + digits + specialChars
password := make([]byte, 8) categories := []string{lowercase, uppercase, digits, specialChars} for i, category := range categories { char, err := getRandomChar(category) if err != nil { return "", err } password[i] = char }
for i := 4; i < 8; i++ { char, err := getRandomChar(allChars) if err != nil { return "", err } password[i] = char }
shuffledPassword, err := shuffle(password) if err != nil { return "", err }
return string(shuffledPassword), nil }
func getRandomChar(s string) (byte, error) { b := make([]byte, 1) _, err := rand.Read(b) if err != nil { return 0, err } index := int(b[0]) % len(s) return s[index], nil }
func shuffle(b []byte) ([]byte, error) { shuffled := make([]byte, len(b)) perm, err := rand.Perm(len(b)) if err != nil { return nil, err } for i, v := range perm { shuffled[v] = b[i] } return shuffled, nil }
func main() { password, err := generatePassword() if err != nil { fmt.Println("Error generating password:", err) return } fmt.Println("Generated Password:", password) }
|