security - 如何让 Golang 种子初始化更强大
问题描述
我会看到人们使用这种方法为 Go 随机播种 init 以使其随机化!
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*10 15种不同的种子组合,对于非安全场景来说已经足够完美了。
rand.Seed()
是播种包的全局Rand
。math/rand
您不必(您不能)为crypto/rand
包裹播种。
查看可能的重复项:Generate random string without time?
查看相关问题:
推荐阅读
- powershell - 无法删除 VDI 分配
- r - 计算多边形的平均宽度
- json - 未捕获(承诺中)TypeError:无法读取未定义的属性“Modul1”
- kivy - 拖动以移动和调整矩形大小的问题,Kivy
- date - 在 Google Data Studio 中,如何比较计算字段中的日期类型变量
- github - yarn run v1.22.5 错误在“/home/runner/work/”中找不到 package.json 文件
- python - 使用雪花连接器和熊猫在查询中传递变量
- jasmine - 针对打印消息的控制台日志进行测试
- service-worker - 为什么服务工作者仅在第二次加载时重新启动?
- oracle - Azure 数据工厂 - 更新到 Oracle