golang 生成密码小工具

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)
	// }
}
发布了66 篇原创文章 · 获赞 8 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/gnufre/article/details/103635708