Random即:java.util.Random,
ThreadLocalRandom 即:java.util.concurrent.ThreadLocalRandomSecureRandom即:java.security.SecureRandom
Q:Random是不是线程安全的?
A:Random是线程安全的,但是多线程下可能性能比较低。
参考:
http://docs.oracle.com/javase/7/docs/api/java/util/Random.html
http://stackoverflow.com/questions/5819638/is-random-class-thread-safe
Q:ThreadLocalRandom为什么这么快?
A:其实这个看下源码就知道了。。因为Random用了很多CAS的类,ThreadLocalRandom根本没有用到。
Q:为什么在高强度要求的情况下,不要用Random?
A:特别是在生成验证码的情况下,不要使用Random,因为它是线性可预测的。记得有个新闻说的是一个XX网站,为了说明其公平,公开的它的源代码,结果因为随机数可预测漏洞被攻击了。所以在安全性要求比较高的场合,应当使用SecureRandom。
参考:http://www.inbreak.net/archives/349
Q:从理论上来说计算机产生的随机数都是伪随机数,那么如何产生高强度的随机数?
A:产生高强度的随机数,有两个重要的因素:种子和算法。当然算法是可以有很多的,但是如何选择种子是非常关键的因素。如Random,它的种子是System.currentTimeMillis(),所以它的随机数都是可预测的。那么如何得到一个近似随机的种子?这里有一个很别致的思路:收集计算机的各种信息,如键盘输入时间,CPU时钟,内存使用状态,硬盘空闲空间,IO延时,进程数量,线程数量等信息,来得到一个近似随机的种子。这样的话,除了理论上有破解的可能,实际上基本没有被破解的可能。而事实上,现在的高强度的随机数生成器都是这样实现的。
比如Windows下的随机数生成器:
http://blogs.msdn.com/b/michael_howard/archive/2005/01/14/353379.aspx
http://msdn.microsoft.com/en-us/library/aa379942%28VS.85%29.aspx
Linux下的 /dev/random:
http://zh.wikipedia.org/wiki//dev/random
据SecureRandom的Java doc,说到在类unix系统下,有可能是利用 /dev/random,来实现的。
其它的一些有意思的东东:
最快的安全性要求不高的生成UUID的方法(注意,强度不高,有可能会重复):
- new UUID(ThreadLocalRandom.current().nextLong(), ThreadLocalRandom.current().nextLong());
随机生成产生随机数的函数?
是否可以利用一个随机数生成器来生成一系列的随机代码,然后作为一个新的随机数生成器?貌似强度是传递的,似乎没意义。
转自:http://blog.csdn.net/hengyunabc/article/details/9913143
相关推荐
可以生成制定范围内的随机数。有GUI界面
Matlab(mathworks.com) 随机数生成方法:Matlab(mathworks.com) 随机数生成方法:
Java简易随机数生成 下载完请输入测试代码 public static void main(String[] args) { System.out.println(random(50,100));//example System.out.println(random(50.0,100.0)); }
随机数生成专家是一款免费强大的随机数生成器,该软件无需安装,打开即可使用,支持三种随机数生成模式,比如范围模式、列举模式和多维模式,可以生成不同形式的随机数,支持生成指定范围内的几乎所有精度的整数和...
包含随机数生成器的源码和打包好的软件,可以生成设定区间的任意个随机数
随机数生成器,可以随机生成随机数,可用于幸运号抽奖等。
随机数生成器(包括数字、字母、特殊符号)
JAVA做的0-100随机数生成器,可脱离JAVA环境运行,稍微有点大
java随机数逆向运算( Random.java ) 相关博客http://blog.csdn.net/qq185773126/article/details/47336593
主要为大家详细介绍了java实现随机数生成器,随机数生成小程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
美国国家标准与技术研究院 关于随机数生成器结构的标准与建议
initrandn() 为 Matlab 的正常(高斯)随机数生成器设置状态。 (Matlab 有两个生成器——“rand”和“randn”——分别用于统一和正常随机数。每个生成器都保持自己的状态)。 如果缺少可选的调用参数,initrandn()...
用jsp页面的方式实现验证码的生成和获取
随机数生成器 可以自动生成满足各种分布条件的随机数
语言用的是C++ ; 开发工具用的是DEV-C; 可指定随机数范围和生成个数; 算法很简单,是一个实用的小工具
1. 设计并实现一个随机数生成电路,每2秒随机生成一个0~999之间的数字,并在数码管上显示生成的随机数。2. 为系统设置一个复位键,复位后数码管显示“000”,2秒后再开始每2秒生成并显示随机数,要求使用按键复位。
随机数生成器,须有java运行环境才可以运行,支持自定义长度,加密复杂度等,内置混淆加密服务,不存在被破解以及重复。
可以随机生成序列号、纯数字、字符串; 其中随机生成纯数字可以自己控制随机数位数。
Java获取随机数的3种方法和总结,正对Java中的随机数做出解释