使用“/dev/urandom”和 GMP 库来生成一个非常大的随机数

问题描述 投票:0回答:1

我正在使用 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 库一起使用。 任何帮助将不胜感激!

c cryptography entropy
1个回答
0
投票

如果您需要使用 /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;
}
© www.soinside.com 2019 - 2024. All rights reserved.