随机数与熵:从 LCG 到 CSPRNG 的工程实践
系统讲解随机数工程:真随机与伪随机的分野、LCG/Mersenne Twister/PCG 的取舍、种子与可复现性、CSPRNG 与操作系统熵池、采样洗牌的拒绝采样、分布变换、UUID 与 Token 中的随机,以及常见误用与安全陷阱。
tag
系统讲解随机数工程:真随机与伪随机的分野、LCG/Mersenne Twister/PCG 的取舍、种子与可复现性、CSPRNG 与操作系统熵池、采样洗牌的拒绝采样、分布变换、UUID 与 Token 中的随机,以及常见误用与安全陷阱。
math/rand/v2 与 iter.Pull 常被记错版本归属。本节用 api 清单核实:前者 Go 1.22 引入、1.24 补 AppendBinary,后者是 Go 1.23 的 range-over-func 配套;再实测 PCG 与 ChaCha8 的可复现与 MarshalBinary 往返,给出 iter.Pull 比 range 慢约 132 倍的真实数字与使用判据。
本文详解 Go 中 math/rand 和 crypto/rand 的区别与用法,覆盖测试随机数生成、业务抽样、安全 Token、验证码等场景,附带常见错误与最佳实践。