c中的种子随机数

Jac*_*ins 0 c random random-seed

我目前正在尝试自学c编程.我被困在学习随机数字上.我访问的许多网站都使用time()函数作为播种随机数生成器的方法.但我读到的许多帖子和网站都说使用系统时钟作为产生随机数的方法是有缺陷的.我的问题是"我究竟应该用什么来生成真正的随机数?我应该用算术操作数字还是还有其他东西?具体来说,我正在寻找程序员遵循的随机生成的"最佳实践" c编程语言中的数字.

这是我正在谈论的网站的一个例子:

http://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1042005782&id=1043284385

Wyz*_*a-- 5

srand(time(NULL))足以满足一般基本用途.它的缺点是:

  • 它不适用于加密,因为攻击者可能会预测伪随机序列.密码学中使用的随机数需要真正不可预测.
  • 如果您快速连续多次运行程序,RNG将以相同或相似的值播种(因为当前时间没有太大变化),因此您每次都可能获得类似的伪随机序列.
  • 如果你生成了很多随机数rand,你可能会发现它们在统计上并不是很好分布.如果您正在进行蒙特卡罗模拟等操作,这一点非常重要.

有更复杂的RNG库可用于加密和统计使用.