我正在使用 Debian Bookworm 和 GMP 库版本 60201。 我需要用 GMP 库生成一个随机数,但我有 2 个要求,如果可能的话,当然!
1 - 生成 0 到特定最大值之间的数字。
2 - 拥有某种熵,最好来自“/dev/urandom/”或更好的东西,但不要太复杂。
我从未使用过这个库,也没有任何使用大数或密码学的经验,所以,我一直在尝试查看文档、互联网上的示例甚至人工智能工具,但到目前为止,我至少无法理解第二点。 我不知道是否可以使用“/dev/urandom/”来获取熵,或者是否可以使用 GMP 库添加熵!
对于第一点,我可能有一个解决方案,即生成随机数,同时生成的数字不低于目标最大值。不确定这是否是最有效的方法,但似乎是一种方法!
类似这样的:
do{
/*
code to generate a random number
*/
}while(randNumber > max_target_val);
对于第二点,我在文档中看到了这一点: https://gmplib.org/manual/Random-State-Seeding
在某些系统上有一个特殊的设备/dev/random,它提供更适合用作种子的随机数据。
但是我找不到任何合适的示例来说明如何将“/dev/urandom/”与 GMP 库一起使用。 任何帮助将不胜感激!
如果您需要使用 /dev/urandom 生成数字作为种子,以下代码可以帮助您。
uint64_t random_num() {
FILE *fp = fopen("/dev/urandom", "rb");
uint64_t num = 0;
fread(&num, sizeof(uint64_t), 1, fp);
fclose(fp);
return num;
}