如何使Golang种子初始化更强大

时间:2019-05-03 11:19:38

标签: security go random

我将看到人们使用这种方法对Go进行随机种子初始化以使其随机化!

func init() {
    rand.Seed(time.Now().UTC().UnixNano())
}

我100%确信此方法不安全, 猜出time.Now().UTC().UnixNano()很简单,然后找到实际生成的随机密码

任何人有一个主意,我还称Windows API生成随机种子是个好主意吗?

1 个答案:

答案 0 :(得分:2)

如果安全起初很重要,那么您应该首先“放下” math/rand并使用crypto/rand

如果安全性“不重要”,那么使用time.Now().UnixNano()进行播种就可以了。 (请注意,无需调用Time.UTC(),因为Time.UnixNano()返回指定为UTC的Unix时间。)

请注意,在24小时内有2592000000000000纳秒,因此即使知道了日期,理论上也有2.592 * 10 15 个不同的种子组合,对于非安全场景而言已经足够了

rand.Seed()是种子math/rand包的全局Rand的种子。您不必(不能)播种crypto/rand程序包。

查看可能的重复项:Generate random string WITHOUT time?

查看相关问题:

Generating a random, fixed-length byte array in Go

How to get a sample of random numbers in golang?