登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-04-06 19:03:33 180浏览 收藏

从现在开始,努力学习吧!本文《如何让 Golang 种子初始化更强大》主要讲解了等等相关知识点,我会在golang学习网中持续更新相关的系列文章,欢迎大家关注并积极留言建议。下面就先一起来看一下本篇正文内容吧,希望能帮到你!

问题内容

我会看到人们使用这种方法来随机种子初始化,以便 go 进行随机!

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

我100%确定这个方法不安全, 猜测 time.now().utc().unixnano() 是 1000x> 很容易找到真正生成的随机密码

有没有人有一个想法,我认为也调用 windows api 来生成随机种子是个好主意?


解决方案


如果安全性从一开始就很重要,那么您应该首先“放弃”math/rand 并使用 crypto/rand

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

请注意,24 小时内有 2592000000000000 纳秒,因此即使已知这一天,理论上也有 2.592*1015 个不同的种子组合,对于非安全场景来说完全足够了。

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?

今天关于《如何让 Golang 种子初始化更强大》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>