Go實現(xiàn)生產(chǎn)隨機密碼的示例代碼
更新時間:2023年09月14日 09:36:28 作者:moon
這篇文章主要為大家詳細介紹了如何利用Go實現(xiàn)生產(chǎn)隨機密碼的,文中的示例代碼簡潔易懂,具有一定的借鑒價值,有需要的小伙伴可以參考一下
生成隨機密碼
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("密碼長度介于4~30之間") return } length = int(i) } baseStr := "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" baseSymbol := "!@#$%^&*+-_=." fmt.Println("-----簡單密碼-----") for i := 0; i < 5; i++ { fmt.Println(getRandStr(baseStr, length)) } fmt.Println("-----復雜密碼-----") 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) }
方法補充
除了上文的方法,小編還為大家整理了一些其他go語言生成隨機密碼的示例代碼,希望對大家有所幫助
示例一
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)置庫flag制作一個隨機密碼生成小工具
// fileName : genpassword.go // createdAt : 2021-12-07 // description : 利用flag生成隨機密碼 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 密碼長度 默認16位") flag.IntVar(&Type, "t", 1, `-t類型 1純字母 2純英文字母 3字母+數(shù)字 4字母+數(shù)字+特殊符號`) 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(
到此這篇關于Go實現(xiàn)生產(chǎn)隨機密碼的示例代碼的文章就介紹到這了,更多相關Go隨機密碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Golang?依賴注入經(jīng)典解決方案uber/fx理論解析
這篇文章主要為大家介紹了Golang依賴注入經(jīng)典解決方案uber/fx理論解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-05-05詳解Golang time包中的time.Duration類型
在日常開發(fā)過程中,會頻繁遇到對時間進行操作的場景,使用 Golang 中的 time 包可以很方便地實現(xiàn)對時間的相關操作,本文講解一下 time 包中的 time.Duration 類型,需要的朋友可以參考下2023-07-07Golang使用gob實現(xiàn)結(jié)構(gòu)體的序列化過程詳解
Golang struct類型數(shù)據(jù)序列化用于網(wǎng)絡傳輸數(shù)據(jù)或在磁盤上寫入數(shù)據(jù)。在分布式系統(tǒng)中,一端生成數(shù)據(jù)、然后序列化、壓縮和發(fā)送;在另一端,接收數(shù)據(jù)、然后解壓縮、反序列化和處理數(shù)據(jù),整個過程必須快速有效2023-03-03golang json.Marshal 特殊html字符被轉(zhuǎn)義的解決方法
今天小編就為大家分享一篇golang json.Marshal 特殊html字符被轉(zhuǎn)義的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08