一、随机数种类
伪随机生成的数字是确定的,不论在什么机器、什么时间,只要执行的随机代码一样,那么生成的随机数就一样
根据密码学原理,要想对一个“随机数”进行随机性检验有以下几个标准:
- 统计学伪随机性 - 在给定的随机比特流样本中,1 的数量大致等于 0 的数量,也就是说,“10”“01”“00”“11” 四者数量大致相等。说人话就是:“一眼看上去是随机的”。
- 密码学安全伪随机性 - 就是给定随机样本的一部分和随机算法,不能有效的演算出随机样本的剩余部分。
- 真随机性 - 其定义为随机样本不可重现。
根据以上几个标准,其对应的随机数也就分为以下几类:
- 伪随机数 - 满足第一个条件的随机数。
- 密码学安全的伪随机数 - 同时满足前两个条件的随机数。可以通过密码学安全伪随机数生成器计算得出
- 真随机数 -同时满足三个条件的随机数
二、随机数生成方法,按概率从小到大
-
“crypto/rand” ,真随机,耗时最长。
对于涉及密码类的开发工作一定要用crypto/randt, _ := crand.Int(crand.Reader, big.NewInt(10000)) if cmp := big.NewInt(0).Cmp(t); cmp == 0 {
2.“math/rand”,比第4种更快
非并发安全