JDK中的随机数机制探究 博客分类: J2SErandomurandomjava jdkjavarandomurandom
程序员文章站
2024-03-01 23:49:16
...
今天有同事问起关于JDK1.8中默认是random问题。
JDK1.8中的java security默认变成random了,JDK1.6和JDK1.7中的java security默认是urandom。
这里就详细探究一下JDK中random与urandom的关系。
首先:random是阻塞机制的,urandom是非阻塞机制的。
其次:urandom最终是调用random的。
最后:random的实现机制是收集操作系统的动态指标并形成UltraTree,UltraTree分支越深越复杂random形成的就越快。
根据上面的三点可以看出,random本身可以生成随机数,但需要操作系统的CPU、Memory、Disk比较忙碌的情况下才会快,否则就需要用urandom这种非阻塞机制函数来生成随机数。
如果非得用random来生成随机数,就要不停的移动鼠标来形成UltraTree。
笔者这里说一个实例,有朋友用Putty生成过安全key吗?在生成的过程中要把鼠标放到空白区域不停的滑动才会生成的快,这个原理也是在收集系统的UltraTree指标。
JDK1.8中的java security默认变成random了,JDK1.6和JDK1.7中的java security默认是urandom。
这里就详细探究一下JDK中random与urandom的关系。
首先:random是阻塞机制的,urandom是非阻塞机制的。
其次:urandom最终是调用random的。
最后:random的实现机制是收集操作系统的动态指标并形成UltraTree,UltraTree分支越深越复杂random形成的就越快。
根据上面的三点可以看出,random本身可以生成随机数,但需要操作系统的CPU、Memory、Disk比较忙碌的情况下才会快,否则就需要用urandom这种非阻塞机制函数来生成随机数。
如果非得用random来生成随机数,就要不停的移动鼠标来形成UltraTree。
笔者这里说一个实例,有朋友用Putty生成过安全key吗?在生成的过程中要把鼠标放到空白区域不停的滑动才会生成的快,这个原理也是在收集系统的UltraTree指标。