C:如何获得4096位素数?

时间:2014-01-16 17:17:01

标签: c cryptography

如何在C中获得一个随机的,非常大的(f.e.4096位)素数? 有没有人知道这个好图书馆?

2 个答案:

答案 0 :(得分:5)

你最好的选择是libgmp

它有一个函数,可以从一些起始编号开始扫描下一个素数(使用Miller-Rabin)。

void mpz_nextprime ( mpz_t rop, mpz_t op );
  

将rop设置为大于op。

的下一个素数      

此函数使用概率算法来识别素数。实际上,它是足够的,复合传递的可能性非常小。

是你想要的功能。

您只需根据需要滚动一个随机数,然后触发mpz_nextprime。运行时应该在O(log(op))附近(概率)。

您还需要其中一个random number generators

答案 1 :(得分:1)

通常,您使用强随机数生成器(例如,在Windows上使用CryptGenRandom)生成一个大的随机数,然后应用一些检查来确定它是否可能是素数。

检查它确实是素数的唯一方法是尝试除以1和(potential-prime / 2)之间的每个数字。如果它们中的任何一个平均分配而没有余数,则它不是素数。由于这将花费不可思议的长时间来计算(这是使用非常大的素数的全部要点),所使用的测试要简单得多,并且基于该数字不太可能具有容易猜测的因素的概率。

如果您正在实施使用加密的软件,我强烈建议您使用经过NIST认证的加密库或模块来生成密钥并进行加密。