私は C で Linux のプロジェクトに取り組んでおり、12 バイトの乱数を生成する必要があります。インターネットで検索しましたが、srand またはランダム関数以外は見つかりませんでした。ただし、これらの関数は 32 ビット (4 バイト) の乱数しか生成できません。
12バイトの乱数の生成を探しています。
この機能を提供するLinux上のライブラリを知っている人はいますか?
わかりましたので、最終的に解決策:
unsigned char buf[12];
int i;
srand(time(NULL));
for (i = 0; i < sizeof(buf); i++) {
buf[i] = rand() % 256;
}
(はい、モジュロを使用しています。均一な分布を気にする場合は、使用しないでください。)
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)
srandom
initstate
/dev/urandom
乱数が必要な理由を教えていただけなかったので、これ以上お手伝いできません。
乱数の品質が非常に重要な場合 (強力な暗号化の目的など)、システムとハードウェアに依存し、思ったよりもはるかに難しい可能性があります (ページをもう一度読んでrandom(4)
ください)。