生成真正的大素数

问题描述 投票:11回答:6

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

encryption rsa primes public-key
6个回答
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

4
投票

看看TrueCrypt是如何做到的。另外,看一下Rabin-Miller来测试大型伪赝品。


2
投票

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


2
投票

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

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


1
投票

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


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.