本文介绍了如何为BN_generate_prime的PRNG播种的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我无法找到关于在openssl/bn.h中使用BN_generate_prime生成素数的答案.另外,我该如何使用此函数使用的任何PRNG种子?

一个单独的问题,但与我的代码有关(我正在编写一个生成RSA密钥对的程序):如何检查BIGNUM中的高位是否已设置?假设我生成了512位素数.我会使用BN_is_bit_set(prime,512)吗?

谢谢

此处.另外,它在crypto/bn_depr.c中定义.您不应该使用它来生成素数.相反,您应该使用BN_generate_prime_ex.这是BN_generate_prime_ex的示例用法:

BIGNUM *r;
static const char rnd_seed[] = "string to make the random number generator think it has entropy";

r = BN_new();
RAND_seed(rnd_seed, sizeof rnd_seed); /* or BN_generate_prime_ex may fail */

BN_generate_prime_ex(r, 512, 0, NULL, NULL, NULL);

BN_free(r);

然后,您将获得一个512位伪随机素数.如上例所示,您可以通过RAND_seed为PRNG设置种子.

对于第二个问题,请尝试 BN_num_bits .

I have not been able to find an answer as to what is used to generate the primes with BN_generate_prime in openssl/bn.h. Also, how would I seed whatever PRNG that this function uses?

Separate question but relevant to my code (I'm writing a program to generate RSA key pairs): how would I check if the high order bit is set in a BIGNUM? Say I generate a 512 bit prime. Would I use BN_is_bit_set(prime, 512)?

Thanks

解决方案

BN_generate_prime is a deprecated function, says here. Also, it is defined in crypto/bn_depr.c. You shouldn't use it to generate primes. Instead, you should use BN_generate_prime_ex. Here's the sample usage of BN_generate_prime_ex:

BIGNUM *r;
static const char rnd_seed[] = "string to make the random number generator think it has entropy";

r = BN_new();
RAND_seed(rnd_seed, sizeof rnd_seed); /* or BN_generate_prime_ex may fail */

BN_generate_prime_ex(r, 512, 0, NULL, NULL, NULL);

BN_free(r);

Then you'll have a 512-bit pseudo-random prime number. As the above example, you can seed the PRNG by RAND_seed.

For the second question, try BN_num_bits.

这篇关于如何为BN_generate_prime的PRNG播种的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-12 15:36