package main
import (
"flag"
"fmt"
"math/rand"
"time"
)
var (
length int
charset string
)
const (
NumStr = "0123456789"
CharStr = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
MixStr = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
Advancestr = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+=-!@#$%*,.[]"
)
func parseArgs() {
flag.IntVar(&length, "l", 16, "-l 指定密码长度")
flag.StringVar(&charset, "t", "num",
`-t 指定生成密码的字符集
num: 使用数字[0-9]
char: 使用英文字符[a-zA-Z]
mix: 使用数字和英文字符组合
advance: 使用数字,英文字符和特殊字符`)
flag.Parse()
}
func generatePasswd() string {
var passwd []byte = make([]byte, length, length)
var sourceStr string
if charset == "num" {
sourceStr = NumStr
} else if charset == "char" {
sourceStr = CharStr
} else if charset == "mix" {
sourceStr = MixStr
} else if charset == "advance" {
sourceStr = Advancestr
} else {
sourceStr = NumStr
}
// fmt.Printf("source %s\n", sourceStr)
for i := 0; i < length; i++ {
index := rand.Intn(len(sourceStr))
passwd[i] = sourceStr[index]
}
return string(passwd)
}
func main() {
rand.Seed(time.Now().UnixNano())
parseArgs()
fmt.Printf("length: %d charset %s\n", length, charset)
passwd := generatePasswd()
fmt.Println(passwd)
// for i := 'a'; i <= 'z'; i++ {
// fmt.Printf("%c", i)
// }
// for i := 'A'; i <= 'Z'; i++ {
// fmt.Printf("%c", i)
// }
}
golang 生成密码小工具
猜你喜欢
转载自blog.csdn.net/gnufre/article/details/103635708
今日推荐
周排行