博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于Random,ThreadLocalRandom,SecureRandom的几点思考
阅读量:7026 次
发布时间:2019-06-28

本文共 588 字,大约阅读时间需要 1 分钟。

hot3.png

  1. Random,ThreadLocalRandom,SecureRandom是Java中的随机数生成器,其中ThreadLocalRandom是jdk7才出现的,是Random的增强版。在并发访问的环境下,使用ThreadLocalRandom来代替Random可以减少多线程竞争,最终保证系统具有更好的线程安全。

  2. Random是线程安全的,但是多线程下可能性能比较低。

  3. 特别是在生成验证码的情况下,不要使用Random,因为它是线性可预测的。所以在安全性要求比较高的场合,应当使用SecureRandom。

  4. 从理论上来说计算机产生的随机数都是伪随机数,要想产生高强度的随机数,有两个重要的因素:种子和。当然算法是可以有很多的,但是如何选择种子是非常关键的因素。如Random,它的种子是System.currentTimeMillis(),所以它的随机数都是可预测的。那么如何得到一个近似随机的种子?这里有一个很别致的思路:收集计算机的各种信息,如键盘输入时间,CPU时钟,内存使用状态,硬盘空闲空间,IO延时,进程数量,线程数量等信息,来得到一个近似随机的种子。这样的话,除了理论上有破解的可能,实际上基本没有被破解的可能。而事实上,现在的高强度的随机数生成器都是这样实现的。

转载于:https://my.oschina.net/wangrikui/blog/548219

你可能感兴趣的文章
postgres10.2时区研究
查看>>
ie9以下不支持html5 解决方法
查看>>
JAVA异常体系
查看>>
C#'~'按位取反运算符的使用
查看>>
HTTP协议
查看>>
防止SQL注入
查看>>
java.io几种读写文件的方式
查看>>
jquery 点击查看,收起特效
查看>>
JS自学笔记05
查看>>
SQL Server参数化查询中应用Like
查看>>
如何用弹出窗口显示进度
查看>>
mysql优化
查看>>
自动化常识
查看>>
js实现倒计时
查看>>
C#保存文件为无BOM的utf8格式
查看>>
MVC、MVP以及MVVM分析
查看>>
解决Android Studio 错误方法
查看>>
kindeditor用法简单介绍
查看>>
bson.errors.InvalidStringData: strings in documents must be valid UTF-8
查看>>
浅析Java中的访问权限控制
查看>>