Go實(shí)現(xiàn)生產(chǎn)隨機(jī)密碼的示例代碼
生成隨機(jī)密碼
package main import ( "fmt" "math/rand" "os" "strconv" "time" ) func RandomPassword(num int) { length := num if len(os.Args) > 1 { arg := os.Args[1] i, err := strconv.ParseInt(arg, 10, 64) if err != nil { fmt.Println("參數(shù)轉(zhuǎn)換失敗") return } if i < 4 || i > 30 { fmt.Println("密碼長(zhǎng)度介于4~30之間") return } length = int(i) } baseStr := "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" baseSymbol := "!@#$%^&*+-_=." fmt.Println("-----簡(jiǎn)單密碼-----") for i := 0; i < 5; i++ { fmt.Println(getRandStr(baseStr, length)) } fmt.Println("-----復(fù)雜密碼-----") for i := 0; i < 5; i++ { fmt.Println(getRandStr(baseStr+baseSymbol, length)) } } func getRandStr(baseStr string, length int) string { r := rand.New(rand.NewSource(time.Now().UnixNano() + rand.Int63())) bytes := make([]byte, length) l := len(baseStr) for i := 0; i < length; i++ { bytes[i] = baseStr[r.Intn(l)] } return string(bytes) } func main() { RandomPassword(25) }
方法補(bǔ)充
除了上文的方法,小編還為大家整理了一些其他go語言生成隨機(jī)密碼的示例代碼,希望對(duì)大家有所幫助
示例一
package main import ( "os" "fmt" "strconv" "math/rand" "time" ) func Usage() { fmt.Println("USAGE: getpw [int]") } func main () { args := os.Args if (len(args) > 2) { Usage() return } if len(args) == 1 { makepw(8) } if len(args) == 2 { pwl , err := strconv.Atoi(args[1]) if err != nil { fmt.Println("參數(shù)不是數(shù)字") return } makepw(pwl) } } func makepw(pwl int) { chars := "abcdefghijkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ23456789" clen := float64(len(chars)) res := "" rand.Seed(time.Now().Unix()) for i := 0; i < pwl; i++ { rfi := int(clen * rand.Float64()) res += fmt.Sprintf("%c", chars[rfi]) } fmt.Println(res) }
示例二:利用內(nèi)置庫(kù)flag制作一個(gè)隨機(jī)密碼生成小工具
// fileName : genpassword.go // createdAt : 2021-12-07 // description : 利用flag生成隨機(jī)密碼 package main import ( "flag" "fmt" "math/rand" "time" ) var ( Length int Type int Num = "0123456789" Char = "abcdefghijklkmnopqrstuvwxyzABCDEFGHIJKLKMNOPQRSTUVWXYZ" Tchar = "!@#$%^&*()-." ) func initFlag() { flag.IntVar(&Length, "l", 16, "-l 密碼長(zhǎng)度 默認(rèn)16位") flag.IntVar(&Type, "t", 1, `-t類型 1純字母 2純英文字母 3字母+數(shù)字 4字母+數(shù)字+特殊符號(hào)`) flag.Parse() } func generagePassword() string { source := Num if Type == 2 { source = Char } else if Type == 3 { source = Num + Char } else if Type == 4 { source = Num + Char + Tchar } pwd := make([]byte, Length, Length) for i := 0; i < Length; i++ { index := rand.Intn(len(source)) //pwd = append(pwd, source[index]) pwd[i] = source[index] } return string(pwd) } func main() { rand.Seed(time.Now().UnixNano()) initFlag() password := generagePassword() fmt.Println(password) } // 執(zhí)行 go run genpassword.go -l=16 -t=4 //輸出 .q$AetKww&fJbVs(
到此這篇關(guān)于Go實(shí)現(xiàn)生產(chǎn)隨機(jī)密碼的示例代碼的文章就介紹到這了,更多相關(guān)Go隨機(jī)密碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Golang?依賴注入經(jīng)典解決方案uber/fx理論解析
這篇文章主要為大家介紹了Golang依賴注入經(jīng)典解決方案uber/fx理論解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05詳解Golang time包中的time.Duration類型
在日常開發(fā)過程中,會(huì)頻繁遇到對(duì)時(shí)間進(jìn)行操作的場(chǎng)景,使用 Golang 中的 time 包可以很方便地實(shí)現(xiàn)對(duì)時(shí)間的相關(guān)操作,本文講解一下 time 包中的 time.Duration 類型,需要的朋友可以參考下2023-07-07Golang使用gob實(shí)現(xiàn)結(jié)構(gòu)體的序列化過程詳解
Golang struct類型數(shù)據(jù)序列化用于網(wǎng)絡(luò)傳輸數(shù)據(jù)或在磁盤上寫入數(shù)據(jù)。在分布式系統(tǒng)中,一端生成數(shù)據(jù)、然后序列化、壓縮和發(fā)送;在另一端,接收數(shù)據(jù)、然后解壓縮、反序列化和處理數(shù)據(jù),整個(gè)過程必須快速有效2023-03-03golang json.Marshal 特殊html字符被轉(zhuǎn)義的解決方法
今天小編就為大家分享一篇golang json.Marshal 特殊html字符被轉(zhuǎn)義的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-08-08Go獲取兩個(gè)時(shí)間點(diǎn)時(shí)間差的具體實(shí)現(xiàn)
本文主要介紹了Go獲取兩個(gè)時(shí)間點(diǎn)時(shí)間差的具體實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04