生活随笔
收集整理的這篇文章主要介紹了
密码生成器
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
package main
import (
"flag"
"fmt"
"math/rand"
"time"
)
var (
length int
charset string
)
const (
NUmStr = "0123456789"
ChanStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
SpecStr = "+=-@#~,.[]()!%^*$"
)
// 解析參數(shù)
func parseArgs() {
flag.IntVar(&length,"l",16,"-l 生成密碼長度")
flag.StringVar(&charset,"t","num",
// 反引號(hào)以原樣輸出
`-t 制定密碼生成的字符集,
num: 只使用數(shù)字,
char: 只使用英文字母,
mix: 使用數(shù)字和字母,
advance: 使用數(shù)字、字母以及特殊字符`)
flag.Parse()
}
// 檢測字符串中的空格
func test1() {
for i := 0; i < len(ChanStr); i++ {
if ChanStr[i] != ' ' {
fmt.Printf("%c",ChanStr[i])
}
}
}
func generatePasswd() string {
// 初始化密碼切片
var passwd []byte = make([]byte,length,length)
// 源字符
var sourceStr string
// 判斷字符類型,如果是數(shù)字
if charset == "num" {
sourceStr = NUmStr
// 如果選的是混合模式
} else if charset == "char" {
sourceStr = fmt.Sprintf("%s",ChanStr)
} else if charset == "mix" {
sourceStr = fmt.Sprintf("%s%s",NUmStr,ChanStr)
// 如果選的是高級(jí)模式
} else if charset == "advance" {
sourceStr = fmt.Sprintf("%s%s%s", NUmStr, ChanStr,SpecStr)
} else {
sourceStr = NUmStr
}
//fmt.Println("source:",sourceStr)
// 遍歷,生成一個(gè)隨機(jī)index索引
for i := 0; i < length; i++ {
index := rand.Intn(len(sourceStr))
passwd[i] = sourceStr[index]
}
return string(passwd)
}
func main() {
// 隨機(jī)種子
rand.Seed(time.Now().UnixNano())
parseArgs()
//fmt.Printf("length:%d charset:%s
",length,charset)
// test1()
passwd := generatePasswd()
fmt.Println(passwd)
//fmt.Printf("length:%d charset:%s
",length, charset)
}
總結(jié)
以上是生活随笔為你收集整理的密码生成器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。