gpt4 book ai didi

random - 使用 GMP 进行加密 : how to get random numbers?

转载 作者:行者123 更新时间:2023-12-02 08:34:54 29 4
gpt4 key购买 nike

documentation for GMP似乎只列出了以下随机数生成算法:

  • gmp_randinit_mt,梅森旋转器;
  • gmp_randinit_lc_2expgmp_randinit_lc_2exp_size,线性同余。

还有gmp_randinit_default,但它指向gmp_randinit_mt

梅森旋转器和线性同余生成器都不应用于密码学。那么,当人们想要使用 GMP 构建一些加密代码时通常会做什么?

(使用加密 API 进行加密/解密等没有帮助,因为我实际上实现了一种新算法,而加密库没有)。

最佳答案

免责声明:我只对 RNG 进行过“修改”,那是一年多前的事了。

如果您使用的是 Linux 机器,则解决方案相对简单且不确定。只需打开并从 /dev/urandom 读取所需的位数。 。然而,如果您的程序需要大量随机位,那么您可能需要使用 /dev/urandom 中的较少数量的位作为 PRNG 的种子。

boost提供了许多 PRNG 和一个非确定性 RNG,random_device。 random_device 在 Linux 上使用完全相同的 /dev/urandom ,在 Windows 上使用类似的 (IIRC) 函数,因此如果您需要 Windows 或 x 平台。

当然,您可能只是想要/需要使用 GMP 的类型和函数根据您喜欢的 RNG 编写一个函数。

<小时/>

编辑:

#include<stdio.h>
#include<gmp.h>
#include<boost/random/random_device.hpp>

int main( int argc, char *argv[]){

unsigned min_digits = 30;
unsigned max_digits = 50;
unsigned quantity = 1000; // How many numbers do you want?
unsigned sequence = 10; // How many numbers before reseeding?

mpz_t rmin;
mpz_init(rmin);
mpz_ui_pow_ui(rmin, 10, min_digits-1);

mpz_t rmax;
mpz_init(rmax);
mpz_ui_pow_ui(rmax, 10, max_digits);

gmp_randstate_t rstate;
gmp_randinit_mt(rstate);

mpz_t rnum;
mpz_init(rnum);

boost::random::random_device rdev;

for( unsigned i = 0; i < quantity; i++){

if(!(i % sequence))
gmp_randseed_ui(rstate, rdev.operator ()());

do{
mpz_urandomm(rnum, rstate, rmax);
}while(mpz_cmp(rnum, rmin) < 0);

gmp_printf("%Zd\n", rnum);
}

return 0;
}

关于random - 使用 GMP 进行加密 : how to get random numbers?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9791761/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com