密碼生成器
阿新 • • 發佈:2018-07-18
turn ner 特殊 imp string () num amp 密碼生成器
package main import ( "flag" "fmt" "math/rand" "time" ) var ( length int charset string ) const ( NUmStr = "0123456789" ChanStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" SpecStr = "+=-@#~,.[]()!%^*$" ) // 解析參數 func parseArgs() { flag.IntVar(&length,"l",16,"-l 生成密碼長度") flag.StringVar(&charset,"t","num", // 反引號以原樣輸出 `-t 制定密碼生成的字符集, num: 只使用數字, char: 只使用英文字母, mix: 使用數字和字母, advance: 使用數字、字母以及特殊字符`) 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 // 判斷字符類型,如果是數字 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) // 如果選的是高級模式 } else if charset == "advance" { sourceStr = fmt.Sprintf("%s%s%s", NUmStr, ChanStr,SpecStr) } else { sourceStr = NUmStr } //fmt.Println("source:",sourceStr) // 遍歷,生成一個隨機index索引 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) // test1() passwd := generatePasswd() fmt.Println(passwd) //fmt.Printf("length:%d charset:%s\n",length, charset) }
密碼生成器