如何生成12个字节的随机数?

时间:2013-02-07 06:03:25

标签: c linux

我正在使用C语言开发Linux项目,我需要生成12个字节的随机数。 我通过互联网搜索但除了srand或随机功能之外我找不到任何其他功能。 但是这些函数只能生成32位(4字节)的随机数。

我正在寻找生成12字节的随机数。

有没有人知道linux上提供此功能的库?

2 个答案:

答案 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)感到高兴,我通常会把它作为种子 - 例如。通过在开始时间阅读srandominitstate/dev/urandom

由于您没有告诉我们您为什么需要随机数字,我们无法提供帮助。

如果随机数的质量非常重要(例如,用于强加密目的),它可能比您想象的要困难得多,并且它取决于系统和硬件(再次阅读random(4)页面)。