发布于 5年前

如何在Go中创建随机的安全密码

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

您可以使用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 = GQ [eoy 
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; EOY cmw

可打印的ASCII字符的十进制值范围为33到126; 没有其他ASCII值适合包含在密码中。因此,本文中提供的实用程序将生成该范围内的ASCII字符。

创建随机整数

第一个实用程序已命名random.go,它生成指定数量的随机整数,这些整数位于给定范围内。最重要的部分 random.go 是这个功能:

func random ( min , max int ) int { 
        return rand 。Intn (最大-最小) +最小
}

此函数使用 rand.Intn() Go函数生成给定范围的随机整数。注意,rand.Intn() 返回非负随机数[0,n); 如果它的参数是负数,该函数将会发生混乱。混乱信息将是panic: invalid argument to Intn

random.go实用程序接受三个命令行参数:生成的整数的最小值,最大值以及将生成的整数。

编译和执行random.go 将创建输出:

$ go build random.go 
$ ./random 
用法:./随机MIX MAX TOTAL 
$ ./random 1 3 10 
2 2 1 2 2 1 1 2 2 1

如果您希望在Go中生成更安全的随机数,请使用crypto/randGo扩展包。

创建随机密码

第二个实例 randomPass.go 将生成随机密码。randomPass.go 使用 random() 函数生成随机数,使用以下Go代码转换为ASCII字符:

for {
        myRand := random ( MIN , MAX )
        newChar := string ( startChar [ 0 ] + byte ( myRand ))
        fmt 。打印( newChar )
        如果 我 = = 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()使用种子值调用以初始化随机数生成器。如果始终使用相同的种子值,则随机数生成器将创建相同的随机整数序列。 golang

你可以在 GitHub上找到 random.gorandomPass.go 代码。

译文地址: https://opensource.com/article/18/5/creating-random-secure-passwords-go

©2020 edoou.com   京ICP备16001874号-3