在 Go 中生成随机的安全密码

Go 的随机数生成器是生成难以猜测的密码的好方法。

Go 的随机数生成器是生成难以猜测的密码的好方法。

在 Go 中生成随机的安全密码

你可以使用Go 编程语言​提供的随机数生成器来生成由 ASCII 字符组成的难以猜测的密码。尽管本文中提供的代码很容易阅读,但是你仍需要了解 Go 的基础知识,才能更好地理解它。如果你是对 Go 还不熟悉,请阅读Go 语言之旅来了解更多信息,然后返回此处。

在介绍实用程序和它的代码之前,让我们先来看看这个 ASCII 表的子集,它可以在​​man 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()​​函数来生成一个属于给定范围的随机整数。请注意,​​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​​。

因此,生成的每个随机数都大于​​MIN​​,小于​​MAX​​,并转换为 ASCII 字符。该过程继续进行,直到生成的密码达到指定的长度。

​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()​​,并提供一个种子seed值,以初始化随机数生成器。如果你始终使用相同的种子值,随机数生成器将生成相同的随机整数序列。

在 Go 中生成随机的安全密码

随机数生成代码

你可以在​​GitHub​​找到​​random.go​​和​​randomPass.go​​的源码。你也可以直接在​​play.golang.org​​上执行它们。

我希望这篇文章对你有所帮助。

©本文为清一色官方代发,观点仅代表作者本人,与清一色无关。清一色对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。本文不作为投资理财建议,请读者仅作参考,并请自行承担全部责任。文中部分文字/图片/视频/音频等来源于网络,如侵犯到著作权人的权利,请与我们联系(微信/QQ:1074760229)。转载请注明出处:清一色财经

(0)
打赏 微信扫码打赏 微信扫码打赏 支付宝扫码打赏 支付宝扫码打赏
清一色的头像清一色管理团队
上一篇 2023年5月6日 04:26
下一篇 2023年5月6日 04:26

相关推荐

发表评论

登录后才能评论

联系我们

在线咨询:1643011589-QQbutton

手机:13798586780

QQ/微信:1074760229

QQ群:551893940

工作时间:工作日9:00-18:00,节假日休息

关注微信