您可以使用Go编程语言提供的随机数生成器来生成由ASCII字符组成的难以猜测的密码。尽管本文提供的代码易于阅读,但您仍然需要了解Go的基础知识才能更好地理解它。如果您是Go新手,请阅读Go语言导览以了解更多信息,然后返回此处。在介绍该实用程序及其代码之前,让我们看一下ASCII表的这个子集,可以在manascii命令的输出中找到:30405060708090100110120----------------------------------0:(2HR\fpz3:!+5?IS]gq{4:",6@JT^hr|5:#-7AKU_is}6:$.8BLV`jt~7:%/9CMWakuDEL8:&0:DNXblv9:'1;EOYcmw在所有ASCII字符中,可打印字符的十进制值范围为33到126,其他ASCII值不适合做密码。因此,本文介绍的实用程序将生成该范围内的ASCII字符。生成RandomIntegers第一个实用程序名为random.go,它会生成指定数量的落在给定范围内的随机整数。random.go最重要的部分是这个函数:funcrandom(min,maxint)int{returnrand.Intn(max-min)+min}这个函数使用rand.Intn()函数生成一个属于给定范围内的值的随机整数。注意rand.Intn()返回的是一个属于给定范围内的非负随机整数[0,n).如果它的参数是负数,这个函数会抛出异常,异常信息是:Panic:invalidargumenttoIntn.Youcanfindi在math/rand文档中使用math/rand包的说明。random.go实用程序接受三个命令行参数:要生成的整数的最小值、最大值和数量。编译和执行random.go产生如下输出:$gobuildrandom.go$./randomUsage:./randomMIXMAXTOTAL$./random13102212211221Go中更安全的随机数,请使用Go库中的crypto/rand包。生成随机密码第二个实用程序randomPass.go用于生成随机密码。RandomPass.go使用random()函数生成随机整数,然后通过以下Go代码将其转换为ASCII字符:for{myRand:=random(MIN,MAX)newChar:=string(startChar[0]+byte(myRand))fmt.Print(newChar)ifi==LENGTH{break}i++}MIN的值为0,MAX的值为94,以及startChar的值是!,这是ASCII表中的第一个可打印字符(十进制ASCII码是33)。因此,所有生成的ASCII字符都在`!`和`~`之间,具有十进制ASCII码126。因此,生成的每一个大于MIN且小于MAX的随机数都被转换为ASCII字符。该过程一直持续到生成的密码达到指定长度。randomPass.go实用程序接受单个(可选)命令行参数来定义生成密码的长度,默认值为8,这是一个非常常见的密码长度。执行randomPass.go将得到类似于以下的输出:$gorunrandomPass.go1Z$gorunrandomPass.go10#Cw^a#IwkT$gorunrandomPass.goUsingdefaultvalues![PP8@'CiatlastOne细节:不要忘记调用rand.Seed()并提供种子值来初始化随机数生成器。如果您始终使用相同的种子值,则随机数生成器将生成相同的随机整数序列。你可以在GitHub上找到random.go和randomPass.go的源代码。您也可以直接在play.golang.org上执行它们。我希望这篇文章对你有所帮助。