【问题标题】:How do I change the Java source for random data?如何更改随机数据的 Java 源?
【发布时间】:2021-10-24 20:35:33
【问题描述】:

我正在尝试在 /dev/random 无法快速填满的机器上运行代码,并且我尝试使用的 java 程序因缺少随机数而挂起。

/dev/urandom 产生“不太好”的随机数,但不会阻塞,对于这种情况,我宁愿减少随机性和完成性,也不愿更好的随机性但从不完成。

我尝试将它传递给 java

-Djava.security.egd=file:/dev/./urandom

但它没有解决任何问题(“/dev/urandom”在某些地方有问题,而“/dev/./urandom”在任何地方都有效,这就是我使用该路径的原因)。有没有办法做到这一点?

我现在已经试过了:

file:/dev/./urandom
file://dev/./urandom
file:///dev/./urandom
file:/dev/urandom
file://dev/urandom
file:///dev/urandom

没有一个有效

【问题讨论】:

  • 最好看看设置系统以更快地填充随机数的方法。 security.stackexchange.com/questions/89/… 给出了一些关于如何做到这一点的例子
  • @DevWithZachary 不幸的是我无法控制系统,所以这不是我的选择之一。集群上的所有其他机器都可以很好地填充它们的随机数(是的,我有一个错误报告)
  • Java 已经使用 /dev/urandom 进行 nextBytes() 调用。也许您可以展示导致问题的代码、您使用的 Java 版本以及它运行的平台。
  • @PresidentJamesK.Polk 我不能。代码在 GATK 3.8 中。 Java *,u202,最后一个免费的 Oracle 版本

标签: java random blocking


【解决方案1】:

fileurl 确实需要 2-3 个正斜杠(根据 RFC 1738):

-Djava.security.egd=file://dev/./urandom
-Djava.security.egd=file://dev/urandom
  • 该系统可能只支持NativePRNG,但不支持SHA1PRNG 算法。此处对其进行了解释:What java.security.egd option is for? 要查看可用的内容:cat /dev/./urandomcat /dev/urandommanpages 状态,可以简单地创建设备,以防它们不存在。

  • 仍有可能,Java 代码可能会阻塞 I/O。

  • 对于容器,这也可能导致性能问题:

/dev/random 设备是一种稀缺的共享系统资源,Linux 容器租户可能没有意识到他们正在共享它。当他们都试图同时使用它时,他们实际上是在互相造成拒绝服务。

【讨论】:

  • 不幸的是,file://dev/./urandom 和 file:///dev/./urandom 都不起作用
猜你喜欢
  • 2022-01-20
  • 2021-02-23
  • 1970-01-01
  • 2020-05-20
  • 1970-01-01
  • 1970-01-01
  • 2012-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多