【问题标题】:How do I generate a 160 bit prime number in java?如何在 java 中生成 160 位素数?
【发布时间】:2013-02-09 23:02:26
【问题描述】:

我想在 java 中生成一个 160 位素数。我知道我必须遍历所有 160 位数字,对于任何数字 n,我必须检查它们是否可以被任何小于 sqroot(n) 的素数或任何素数测试(如 @987654323)整除@。我的问题是:

  1. 有没有特定的库可以做到这一点?

  2. 还有其他(更好的)方法可以做到这一点吗?

【问题讨论】:

  • "I know that I'll have to loop through all the 160-bit numbers and for any number n" -- 你有多少时间?
  • “160 位素数”是否包括像 2 或 5 这样的素数?
  • @DestinyCalling 如果每秒可以循环 10 亿 个数字,那么循环 2^160 个数字需要多少秒?提示:2^x/2^y = 2^(x-y) 并且每天少于 2^18 秒..
  • 很高兴你解决了它。我认为使用我的计算机,执行您描述的循环将占用 1,然后是 22 个零(7.440979924644339E22 是我的最新计算)。我自己,我没有那么多时间。
  • @HovercraftFullOfEels - Lolz。我也不。但在我在这里发布我的问题之前,我对此并不了解。

标签: java primes


【解决方案1】:

BigInteger.probablePrime(160, new Random()) 生成一个几乎可以肯定是素数的BigInteger——它不是素数的概率小于你被闪电击中的概率。一般来说,BigInteger 已经内置了经过大量测试和优化的素数测试操作。

对于它的价值,这不会永远持续的原因是,根据素数定理,随机选择的 n 位数字的概率与成为素数的 1/n 成正比,所以平均而言,你只需要尝试O(n) 个不同的随机 n 位数,然后才能找到素数。

【讨论】:

  • 嗯......这打败了我的“生成 320 位 RSA 密钥并窃取素数”的想法 :-(
  • 我想知道 Java 生成的 RSA 密钥中的素数是否更有可能是素数。我猜他们可能会在幕后使用这种方法。
  • 不过,new Random() 在这种情况下是推荐的 PRNG 吗?似乎,如果想找到可能的素数(用于加密?),就需要更好的来源。
  • 完全取决于你想要什么。
  • @DuncanJones Java 对于大多数部分都是开源的。别猜了,查代码:)
猜你喜欢
  • 1970-01-01
  • 2017-02-01
  • 2016-02-08
  • 2019-10-25
  • 1970-01-01
  • 2014-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多