random number
Pedro Gimeno
gmpdiscuss at personal.formauri.es
Thu Mar 19 00:01:42 CET 2009
José de Jesús Angel Angel wrote:
> Hello
>
> I would like know if this is the best way for generating a randon number
> of 160 bits.
> What I have to do for improve this.
>
> unsigned long int seed;
> mpz_t temp;
> gmp_randstate_t state;
> mpz_init(temp);
> gmp_randinit_default(state);
>
> seed= rand();
> gmp_randseed_ui (state,seed);
>
>
> mpz_urandomb(temp, state, 160);
> mpz_out_str (NULL, 10, temp);
> cout << endl;
>
> mpz_clear(temp);
Ultimately, that code depends on your C library's rand() function,
meaning that the seeding process depends on how well it's initialized
and how many random numbers it produces (e.g. if RAND_MAX equals 32767,
you can't get more than 32768 different random numbers in total and it's
likely that one of them will be repeated in about 180 steps or so).
Other than that, the code looks fine. Just don't use it for
cryptographic purposes. If your intention is cryptographic, I suggest
you use OpenSSL instead to generate random numbers. Use this command to
obtain a base64-encoded 160-bit string:
openssl rand -base64 20
Or just omit the -base64 switch to obtain a binary dump of 20 bytes (160
bits) which you can write to file with the -out switch.
-- Pedro Gimeno
More information about the gmp-discuss
mailing list