srand导致我的程序冻结

时间:2012-05-28 03:58:18

标签: c++ encryption rsa srand

我已经在C ++中实现了RSA算法,程序正在运行但是srand调用正在使程序变慢。我使用srand生成两个素数和加密密钥(e)。这是片段

...............................................
do
{
    p = make_prime_number();
    q = make_prime_number();
}while(p == q);

phi = (p - 1) * (q - 1);
n = p * q;

do
{
    e = random_builder (20);

    int *t = extended_gcd (e, phi);
    d = t[0];
}while(gcd(e, phi) != 1 || d < 1 || d >= n );
...............................................

int random_builder(const int max)
{
    srand(time(NULL));

    return rand() % max + 1;
}

bool is_prime(const int num)
{
    for(int i = 2; i <= num/2; i++)
        if(num % i == 0) 
            return false;

    return true;
}

int make_prime_number()
{
    int num;

    do
    {
        num = random_builder(20);
    }while(not is_prime(num));

    return num;
}

我们能以某种方式通过修改srand中的种子来加速这个过程吗?

2 个答案:

答案 0 :(得分:5)

无需多次拨打srand()。 在程序开始时将其命名为,然后不管它。

在使用特定种子值调用srand()后,相同的随机数序列由rand()生成。因此,由于您使用中的当前时间进行呼叫,因此random_builder()函数仅在每时返回一个不同的值。

答案 1 :(得分:0)

您根本不应使用rand()srand。您应该使用播种良好的加密PRNG。在Linux上,您只需阅读/dev/urandom,在Windows上即可使用CryptGenRandom