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