我正在使用C语言开发Linux项目,我需要生成12个字节的随机数。 我通过互联网搜索但除了srand或随机功能之外我找不到任何其他功能。 但是这些函数只能生成32位(4字节)的随机数。
我正在寻找生成12字节的随机数。
有没有人知道linux上提供此功能的库?
答案 0 :(得分:5)
好的,最后一个解决方案:
unsigned char buf[12];
int i;
srand(time(NULL));
for (i = 0; i < sizeof(buf); i++) {
buf[i] = rand() % 256;
}
(是的,我正在使用模数 - 如果您关心均匀分布,请不要使用它。)
答案 1 :(得分:3)
你没有告诉你12个随机字节是什么意思,以及你为什么需要它们。
您应该阅读random(4),然后阅读代码
unsigned char myrandbytes[12];
FILE* fr = fopen("/dev/urandom", "r");
if (!fr) perror("urandom"), exit(EXIT_FAILURE);
fread(myrandbytes, sizeof(char), 12, fr);
fclose(fr), fr = NULL;
但是,经常使用that answer中建议的rand(3)
就足够了。您也可以使用random(3)或lrand48(3)。我通常对random(3)
感到高兴,我通常会把它作为种子 - 例如。通过在开始时间阅读srandom
来initstate
或/dev/urandom
。
由于您没有告诉我们您为什么需要随机数字,我们无法提供帮助。
如果随机数的质量非常重要(例如,用于强加密目的),它可能比您想象的要困难得多,并且它取决于系统和硬件(再次阅读random(4)
页面)。