【问题标题】:How to generate all possible 64 bit random values in java?如何在java中生成所有可能的64位随机值?
【发布时间】:2019-01-12 18:10:29
【问题描述】:

如果 Java SecureRandom.nextLong() 继承自仅使用 48 位的 Random,它是否返回所有可能的值?如果没有,我是否仍然可以在 Java 中通过修改 Random 类来做到这一点以及如何做到这一点?我只想使用一个全随机长数字生成器,如果可能的话,可以返回所有可能的长值。

【问题讨论】:

  • 我对问题的措辞有点困惑。我猜你不想生成所有可能的 Long 值。我猜你想从所有可能的 Long 值的集合中得到一个随机数?
  • 如果你真的想要一个随机数(不是基于离散数学的),你应该访问一些在线网站。例如:random.org
  • @zlakad 除非您希望它具有加密安全性,在这种情况下您绝对想从其他来源获取随机数据。
  • @PeterLawrey,是的,我明白你的意思。我在 1982-3 年为 Z80 处理器的几代随机比特编写了一个汇编程序算法。天哪,我忘记了一切!
  • 是的,来自所有可能的 long 值的集合,而不是所有 long 值的集合。

标签: java random generator long-integer secure-random


【解决方案1】:

虽然 SecureRandom 继承自 Random,但它不使用相同的数学运算或具有相同的限制。它最终会产生所有可能的 64 位值。

这个类提供了一个加密的强随机数生成器 (RNG)。

这个类委托给许多可能的实现之一。您可以拨打SecureRandom.getInstance(algorithm)选择一个

注意:某些实现在您的计算机中使用熵来使结果随机,而不是纯粹的伪随机。

这使用了 s 48 位算法

SecureRandom 不使用其父级的任何方法,例如

/**
 * The provider implementation.
 */
private SecureRandomSpi secureRandomSpi = null;

public void nextBytes(byte[] bytes) {
    secureRandomSpi.engineNextBytes(bytes);
}

这个方法委托给一个完全不同的实现。

相关链接How to solve slow Java `SecureRandom`?由于使用/dev/random

【讨论】:

  • 我希望这是真的
  • 赞成,因为我分享了@PeterLawrey的理解
  • @EngineerDollery 不幸的是,Random 不是一个接口但被广泛使用,因此设计者决定扩展 Random,但用完全不同的实现替换它,但由于它扩展了 Random 它可以使用作为替代品。
  • 好的,已删除反对票。我应该更厌倦不同意你的观点;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-14
  • 1970-01-01
  • 2016-01-05
  • 2018-06-07
  • 1970-01-01
  • 2011-07-15
  • 1970-01-01
相关资源
最近更新 更多