生成真正的大素数

时间:2009-07-18 00:24:33

标签: encryption rsa primes public-key

我正在玩并尝试编写RSA的实现。问题在于我不得不生成生成密钥对所涉及的大量素数。有人能指出我快速生成巨大的素数/可能的素数吗?

6 个答案:

答案 0 :(得分:18)

您不会准确生成素数。你随机生成一个大的奇数,然后测试该数是否是素数,如果不是随机生成另一个。有一些素数定律基本上表明你通过随机尝试“击中”素数的几率为(2 / ln n)

例如,如果你想要一个512位的随机素数,你会发现一个2 /(512 * ln(2)) 因此,您尝试的每177个数字中大约有1个是素数。

有多种方法可以测试一个数字是否为素数,一个好的方法是“Miller-Rabin测试”as stated in another answer to this question

此外,OpenSSL有一个很好的实用程序来测试质数:

$ openssl prime 119054759245460753
1A6F7AC39A53511 is not prime

答案 1 :(得分:4)

了解TrueCrypt如何做到这一点。另外,请查看Rabin-Miller以测试大型伪赝品。

答案 2 :(得分:2)

您没有提到您正在使用的语言。有些人有一种内置方法。例如,在java中,这就像在BigInteger上调用nextProbablePrime()一样简单。

答案 3 :(得分:2)

之前的回答不正确:2 * 3 * 5 * 7 * 11 * 13 + 1 = 30031 = 509 * 59。

我认为这张海报错误地记录了(真实的)证明有无数的素数。

答案 4 :(得分:1)

Mono有一个像java一样开源的BigInteger类。你可以看看那些。他们可能是便携式的.g'luck

答案 5 :(得分:1)

有一种算法归因于U. Maurer,它产生随机可证明(与统计上非常可能相反)的素数,这些素数几乎均匀地分布在特殊大小的所有素数集合上。我有一个Python的实现,在以下方面非常有效: http://s13.zetaboards.com/Crypto/topic/7234475/1/