Go实现生产随机密码的示例代码
更新时间:2023年09月14日 09:36:28 作者:moon
这篇文章主要为大家详细介绍了如何利用Go实现生产随机密码的,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以参考一下
生成随机密码
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("参数转换失败")
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("参数不是数字")
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)
}示例二:利用内置库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字母+数字
4字母+数字+特殊符号`)
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)
}
// 执行 go run genpassword.go -l=16 -t=4
//输出 .q$AetKww&fJbVs(到此这篇关于Go实现生产随机密码的示例代码的文章就介绍到这了,更多相关Go随机密码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:
相关文章
详解Golang time包中的time.Duration类型
在日常开发过程中,会频繁遇到对时间进行操作的场景,使用 Golang 中的 time 包可以很方便地实现对时间的相关操作,本文讲解一下 time 包中的 time.Duration 类型,需要的朋友可以参考下2023-07-07
golang json.Marshal 特殊html字符被转义的解决方法
今天小编就为大家分享一篇golang json.Marshal 特殊html字符被转义的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2019-08-08


最新评论