golang获取随机密码
您可以使用Go编程语言提供的随机数生成器来生成由ASCII字符组成的难以猜测的密码。 尽管本文提供的代码易于阅读,但是最好是已经了解Go的基础知识以理解它。 如果您是编程语言的新手,请参加“ 漫游”以了解更多信息,然后返回此处。
在进入实用程序和代码之前,请看一下man ascii
命令的输出中找到的ASCII表的此子集:
30 40 50 60 70 80 90 100 110 120
---------------------------------
0: ( 2 < F P Z d n x
1: ) 3 = G Q [ e o y
2: * 4 > H R \ f p z
3: ! + 5 ? I S ] g q {
4: " , 6 @ J T ^ h r |
5: # - 7 A K U _ i s }
6: $ . 8 B L V ` j t ~
7: % / 9 C M W a k u DEL
8: & 0 : D N X b l v
9: ' 1 ; E O Y c m w
可打印ASCII字符的十进制值范围为33到126; 没有其他ASCII值适合包含在密码中。 因此,本文介绍的实用程序将在该范围内产生ASCII字符。
创建随机整数
第一个实用程序名为random.go
,它生成指定数量的驻留在给定范围内的随机整数。 random.go
最重要的部分是此功能:
func random
( min
, max
int
)
int
{
return rand
. Intn
( max
- min
)
+ min
}
此函数使用rand.Intn()
Go函数生成属于给定范围的随机整数。 请注意, rand.Intn()
返回一个属于[0,n)
的非负随机数; 如果函数的参数为负数,则它将惊慌。 紧急消息将是panic: invalid argument to Intn
。 您可以在math / rand文档中找到math/rand
软件包的文档 。
random.go
实用程序接受三个命令行参数:生成的整数的最小值,最大值和将要生成的整数数。
编译并执行random.go
将创建以下输出:
$ go build random.go
$ ./random
Usage: ./random MIX MAX TOTAL
$ ./random 1 3 10
2 2 1 2 2 1 1 2 2 1
如果您希望在Go中生成更安全的随机数,请使用Go库的crypto/rand
软件包。
创建随机密码
第二个实用程序randomPass.go
生成随机密码。 randomPass.go
使用random()
函数生成随机数,该随机数将使用以下Go代码转换为ASCII字符:
for
{
myRand
:= random
( MIN
, MAX
)
newChar
:=
string
( startChar
[
0
]
+
byte
( myRand
))
fmt
. Print
( newChar
)
if
i
== LENGTH
{
break
}
i
++
}
MIN的值为0 ,MAX的值为94 ,而startChar
值为! ,这是ASCII表中的第一个可打印字符(十进制ASCII码为33 )。 因此,将要生成的所有ASCII字符都位于!之后。 在〜字符之前,其十进制ASCII码为126 。
randomPass.go
实用程序接受单个(可选)命令行参数,该参数定义生成的密码的长度。 它的默认值是8,这是一个非常普通的密码长度。 执行randomPass.go
将生成以下类型的输出:
$ go run randomPass.go 1
Z
$ go run randomPass.go 10
#Cw^a#IwkT
$ go run randomPass.go
Using default values!
[PP8@'Ci
最后一个细节:不要忘记用种子值调用rand.Seed()
来初始化随机数生成器。 如果您始终使用相同的种子值,则随机数生成器将创建相同的随机整数序列。
您可以在GitHub上找到random.go
和randomPass.go
。 您也可以在play.golang.org上执行它。
希望这有用。 如有任何疑问,请在下面发表评论,或在Twitter上与我联系。
翻译自: https://opensource.com/article/18/5/creating-random-secure-passwords-go
golang获取随机密码