KeyFactory.generatePublic() 需要很长时间 time/hangs

KeyFactory.generatePublic() takes lot of time/hangs for long time

我正在使用以下密钥工厂实例:

factory = KeyFactory.getInstance("RSA", "BCFIPS");

当我在下面的代码中生成 public 键时,它挂了很长时间:

publickey = factory.generatePublic(spec);

有时代码 returns 需要 1 分钟,有时需要 5 分钟,有时需要 10 分钟。

知道是否存在任何已知问题。 此问题仅在 RHEL 6 上发生。在 RHEL7 中,它运行速度很快。

这是熵生成速度慢的问题。参见 Avoiding JVM Delays Caused by Random Number Generation

要点是您必须使用 /dev/urandom 而不是 /dev/random。 在文本编辑器中打开 $JAVA_HOME/jre/lib/security/java.security 文件 并将 securerandom.source 的值从 file:/dev/random 更改为 file:/dev/urandom.

但是,请注意生成的随机数的质量会 自卑,如果你担心国家级攻击,你应该 接受延迟并继续使用 /dev/random.

请注意,曾经出现过一个问题,即即使您指定了 /dev/urandom,系统也会使用 /dev/random。如果您更改此设置并且 仍然 看到长时间延迟,请将其更改为 /dev/./urandom 以避免硬编码测试。