
你可以使用 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 最重要的部分是b2b供应网这个函数: 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值,以初始化随机数生成器。如果你始终使用相同的种子值,随机数生成器将生成相同的随机整数序列。 
随机数生成代码 你可以在 GitHub 找到 random.go 和 randomPass.go 的源码。你也可以直接在 play.golang.org 上执行它们。 我希望这篇文章对你有所帮助。WordPress模板 |