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("-----復(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)
}方法補充
除了上文的方法,小編還為大家整理了一些其他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 密碼長度 默認(rèn)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(到此這篇關(guān)于Go實現(xiàn)生產(chǎn)隨機密碼的示例代碼的文章就介紹到這了,更多相關(guān)Go隨機密碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Golang?依賴注入經(jīng)典解決方案uber/fx理論解析
這篇文章主要為大家介紹了Golang依賴注入經(jīng)典解決方案uber/fx理論解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-05-05
詳解Golang time包中的time.Duration類型
在日常開發(fā)過程中,會頻繁遇到對時間進行操作的場景,使用 Golang 中的 time 包可以很方便地實現(xiàn)對時間的相關(guān)操作,本文講解一下 time 包中的 time.Duration 類型,需要的朋友可以參考下2023-07-07
Golang使用gob實現(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ù),整個過程必須快速有效2023-03-03
golang json.Marshal 特殊html字符被轉(zhuǎn)義的解決方法
今天小編就為大家分享一篇golang json.Marshal 特殊html字符被轉(zhuǎn)義的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08

