在Go中创建随机的安全密码
go的随机数生成器是生成难以猜出的密码的一种很好的方法。
属性提供的随机数生成器。go编程语言生成由ascii字符组成的难以猜测的密码。尽管本文中提供的代码很容易阅读,但最好已经知道了解它的基本知识。如果您对编程语言不熟悉,要去参观学习,然后回到这里。
在进入实用程序和代码之前,请查看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这一职能是:
randommin max return randintnmaxmin min
此函数使用rand.in()go函数生成属于给定范围的随机整数。注意,rand.intn()返回一个属于[0,n]的非负随机数;你可以在数学/rand文档中找到数学/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库的密码/ 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++ }
最小值为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
最后一个细节:不要忘了用seed值调用rand.seed()来初始化随机数生成器。如果始终使用相同的种子值,随机数生成器将创建相同的随机整数序列。
你可以同时找到random.go和randompass.go在github。您也可以在play.golang.org.希望这有所帮助
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接
上一篇: 女性朋友是否能经期喝茶吗