当前位置: 首页 > 面试题库 >

Java如何处理缓慢的SecureRandom生成器?

云育
2023-03-14
问题内容

如果你想要Java中具有加密强度的随机数,请使用SecureRandom。不幸的是,SecureRandom可能会很慢。如果/dev/random在Linux上使用,它将阻止等待足够的熵建立。你如何避免性能下降?

有没有人使用罕见数学作为解决此问题的方法?

任何人都可以确认在JDK 6中已经解决了此性能问题吗?


问题答案:

如果你想要真正的随机数据,那么不幸的是你必须等待它。这包括SecureRandomPRNG 的种子。罕见的数学无法以比更快的速度收集真正的随机数据SecureRandom,尽管它可以连接到互联网以从特定网站下载种子数据。我的猜测是,这不可能比可用的速度更快/dev/random

如果你想要PRNG,请执行以下操作:

SecureRandom.getInstance("SHA1PRNG");

支持哪些字符串取决于SecureRandomSPI提供程序,但是你可以使用Security.getProviders()和枚举它们Provider.getService()

Sun喜欢SHA1PRNG,因此可以广泛使用。随着PRNG的发展,它并不是特别快,但是PRNG只是计算数字,不会阻碍对熵的物理测量。

唯一的例外是,如果你setSeed()在获取数据之前不进行调用,则PRNG会在你首次调用next()或时提供种子nextBytes()。通常,它将使用系统中少量的真实随机数据来执行此操作。该调用可能会阻止,但将使你的随机数源比“将当前时间与PID一起哈希,加27并希望达到最佳效果”的任何变体更为安全。但是,如果你需要的只是游戏的随机数,或者如果你希望将来使用同一种子进行测试以使流可重复,则不安全的种子仍然有用。



 类似资料:
  • 问题内容: 假设您做简单的事情: 现在,随着运行的http://本地主机作为 它需要完成。 现在尝试https:// localhost 这需要。 现在在linux或docker中运行相同的东西: http: https: 为什么是这样?为什么平台之间会有如此巨大的差异?你能为这个做什么? 对于长时间运行的应用程序服务器以及具有各自冗长且繁琐的初始化序列的应用程序,这5秒可能无关紧要。 但是,在许

  • 问题内容: 我在CentOS 6.6 32位和openJDK7上使用Tomcat 7.0.57。当我在服务器(生产环境)上启动14个不同的Tomcat实例时,它们中的许多启动时间都太多了。 这是启动日志的一部分,它告诉我所有时间都花在哪里 解决此问题的最佳实践/解决方案是什么? 谢谢! 问题答案: 安全的随机调用可能会被阻止,因为没有足够的熵来将它们提供给/ dev / random。 如果你有线

  • 我下载了android应用程序的处理文件(这里是链接http://www.gwoptics.org/processing/mobile/BouncingBall/)我尝试在处理时进行编译,但出现以下两个错误: 找不到android.content.res的库 库必须安装在“sketchbook”文件夹中名为“Libraries”的文件夹中。 我想从这个项目生成整个java,这样我就可以使用它的一些

  • 我有一个大型的webpack构建,几乎挂在91%的“附加资产处理”步骤上,没有给我更多的信息。仅仅这一步就需要4分钟,而且随着我们向构建中添加模块,这一步似乎几乎呈指数增长。有没有一种方法可以更好地理解在这一步中所做的事情,并最终优化它?

  • 问题内容: 通常,应在目标目录中创建生成的源。但是,如何处理仅用于测试的类?我不希望这些类打包在我的jar中。有解决这种情况的通用方法吗? 问题答案: 使用maven build helper插件的目标将生成的测试源文件添加到build-> http://mojo.codehaus.org/build-helper-maven-plugin/add-test-source- mojo.html 它

  • 我正在尝试将ANTLR3语法转换为ANTLR4语法,以便在ANTLR4-python2-runtime中使用它。该语法是一个C/C模糊解析器。 转换后(基本上删除树运算符和语义/语法谓词),我使用以下方式生成Python2文件: 并且代码生成时没有任何错误,所以我将其导入我的python项目(我使用PyCharm)进行一些测试: 我的假设是正确的还是在转换语法时犯了一些错误?我们可以做些什么来让解