Random 生成随机长无符号C

Random 生成随机长无符号C,random,Random,这是我的代码: #include <stdio.h> #include <time.h> #include <unistd.h> #include <crypt.h> #include <string.h> #include <stdlib.h> int main(void){ int i; unsigned long seed[2]; /* Generate a (not very) random seed */ s

这是我的代码:

#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <crypt.h>
#include <string.h>
#include <stdlib.h>

int main(void){

int i;
unsigned long seed[2];

/* Generate a (not very) random seed */
seed[0] = time(NULL);
seed[1] = getpid() ^ (seed[0] >> 14 & 0x30000);

printf("Seed 0: %lu ; Seed 1: %lu", seed[0], seed[1]);
return 0;
}

我想生成一些非常随机的种子,将用于哈希函数,但我不知道怎么做

例如,它是一种广泛使用的伪随机数发生器,因为它速度很快,周期很长,分布很好。不要试图编写自己的实现,请使用任何一个。

您可以从/dev/random读取所需的随机位

读取时,/dev/random设备将只返回熵池中估计的噪声位数内的随机字节/dev/random应该适用于需要非常高质量随机性的使用,例如一次性生成键盘或密钥。当熵池为空时,从/dev/random读取的数据将被阻止,直到收集到额外的环境噪声。http://www.kernel.org/doc/man-pages/online/pages/man4/random.4.html

int randomSrc = open("/dev/random", O_RDONLY);
unsigned long seed[2];
read(randomSrc , seed, 2 * sizeof(long) );
close(randomSrc);

因为算法是确定性的,所以你不能得到非常随机的,只能得到伪随机的——在大多数情况下,如果你做得太过火了,你会得到很多

Mac address + IP address + free space on HD + current free memory + epoch time in ms...
然后,您就有可能削弱算法的性能

如果您的解决方案是交互式的,那么您可以为用户设置一个简短的键入任务,让他们为您生成随机数据-测量击键之间的时间,并将其乘以他们按下的键的代码-即使他们重新键入相同的字符串,计时也会稍微中断-您可以稍微混合一下,当他们开始时,取10秒的模数,只计算击键次数

但是如果你真的想要100%的随机数-那么你可以使用-


这是一种非常棒的打败坏人的方法。

这可能看起来是随机的,但实际上可能有一个可怕的分布,并且不像预期的那样随机。但是量子随机数发生器是有保证的——它采用海森堡的测不准原理——本质上,你不可能知道所有的事情,如果我们有一个完美的真空?事实证明,宇宙疯狂地喷出虚拟粒子只是为了让科学家们感到困惑。对不起,我刚才说的是你的第一个将各种元素相加的解决方案。quantuum数字生成器,就像所有基于物理的生成器一样,可能有点难以实现:但是它确实是生成随机数的一种非常好的方法,因为真正有效的随机性(我的意思是不基于确定性算法)是基于物理原理的。使用大气噪音生成数字。感谢github的链接!我知道他们只是使用HTTP在服务器上获取数据,但这可能有用