我将看到人们使用这种方法对Go进行随机种子初始化以使其随机化!
func init() {
rand.Seed(time.Now().UTC().UnixNano())
}
我100%确信此方法不安全,
猜出time.Now().UTC().UnixNano()
很简单,然后找到实际生成的随机密码
任何人有一个主意,我还称Windows API生成随机种子是个好主意吗?
答案 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?
查看相关问题: