c - RSA key 生成

标签 c rsa number-theory

//test whether it is prime number ot not   
int prime_test(long int prime_number)

{
      long int a, p;
      srand((unsigned)time(NULL));

      //0 and 1 not meaning for prime test.
      a = rand() % (prime_number - 2) + 2; 
      printf("a -> %li\n", a);

      //Lehmann Algorithm, p = a^((prime_number-1)/2) mod prime_number
      p = (long int)pow(a, (prime_number - 1) / 2) % prime_number;
      printf("p -> %li\n", p);

      if(p != 1 & (prime_number - p) != 1)
      {
                  printf("Enter number is not prime number.\n");
                  return 0;
      }
      else
      {    
                  printf("Enter number is prime number.\n");
                  return 1;
      }
}

我的问题是为什么我得到负数 p -984,实际上 1997 是一个质数,
它应该是 1 或 -1。 输出如下:

输入质数p:1997
一个 -> 1557
p -> -984
输入的数字不是质数!
温度 1 -> 0
请重新输入质数p:

最佳答案

1557 ^ 998 不太适合 long int

更有建设性一点:如果你像这样计算 p,它会花费更长的时间,但要避免溢出:

p = 1;
for ( i=0; i<(prime_number-1)/2; i++ )
    p = (p*a) % prime_number;

有(非常好的)方法可以优化它,但我会把它留作练习。

关于c - RSA key 生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30399358/

相关文章:

c - 多数表决算法 - 错误?

C:从文件中读取SUB字符

python - 如何使用 python 复制 ssh-keygen 的功能

c# - 系统.Security.Cryptography.CryptographicException : Bad length in RSACryptoserviceProvider

java - 如何使用另一个 RSAKey 加密一个 RSAKey?

algorithm - 有什么好的方法可以分解高斯整数?

java - 如何生成冈本内山密码系统的公钥?

c - 再次打印对函数的最后一次调用

c - gcc -E 是什么意思?

algorithm - 确定 (x^2 + x + 1)^n 中 x^m 项的系数是偶数还是奇数