实现一个密码生成工具,支持以下功能:
a) 用户可以通过-l指定生成密码的长度
b) 用户可以通过-t指定生成密码的字符集,比如
-t num 生成全数字的密码
-t char 生成包含全英文字符的密码,
-t mix 包含生成数字和英文的密码,
-t advance 生成包含数字、英文以及特殊字符的密码
package main
import (
"crypto/rand"
"flag"
"fmt"
"math/big"
)
func generatePassword(l int, t string) string {
var password string
var elements []rune
switch t {
case "num":
elements = []rune{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}
case "char":
elements = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
case "mix":
elements = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")
case "advance":
elements = []rune(`abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789~!@#$%^&**()_+-=/\[],.;'":`)
default:
flag.PrintDefaults()
}
if len(elements) > 0 {
for i := 0; i < l; i++ {
p, err := rand.Int(rand.Reader, big.NewInt(int64(len(elements))))
if err != nil {
panic("生成密码失败")
}
password += string(elements[p.Int64()])
}
}
return password
}
func main() {
var (
l = 0
t = ""
)
flag.IntVar(&l, "l", 0, "password length")
flag.StringVar(&t, "t", "num", "password type")
flag.Parse()
if l <= 0 || len(t) == 0 {
flag.PrintDefaults()
return
}
p := generatePassword(l, t)
fmt.Printf("password=%s\n", p)
}
有疑问加站长微信联系(非本文作者)