0

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

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

有人知道 linux 上提供此功能的任何库吗?

4

2 回答 2

6

好的,最后一个解决方案:

unsigned char buf[12];
int i;
srand(time(NULL));
for (i = 0; i < sizeof(buf); i++) {
    buf[i] = rand() % 256;
}

(是的,我正在使用模数 - 如果您关心均匀分布,请不要使用它。)

于 2013-02-07T06:12:23.677 回答
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;

但很多时候,按照该答案rand(3)中的建议使用就足够了。您也可以使用random(3)lrand48(3)。我通常很高兴我通常会播种 - 例如在开始时阅读或阅读。random(3)srandominitstate/dev/urandom

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

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

于 2013-02-07T06:25:08.623 回答