SecureRandom
- SecureRandom类提供加密的强随机数生成器 (RNG)
- 当然,它的许多实现都是伪随机数生成器 (PRNG) 形式,这意味着它们将使用确定的算法根据实际的随机种子生成伪随机序列
- 也有其他实现可以生成实际的随机数
- 还有另一些实现则可能结合使用这两项技术
SecureRandom generater = new SecureRandom();
System.out.println(generater.nextInt(37));
SecureRandom generater = new SecureRandom();
System.out.println(generater.nextInt(37));
1、创建SecureRandom
1.1 new
1.2 getInstance
- 其中需要传参的方法,则传算法名即可,如果不存在算法会抛出异常;
- 另外需要传参,传两个参数的,第二个参数还可以指定算法程序包。
SecureRandom secureRandom = new SecureRandom();
SecureRandom secureRandom3 = SecureRandom.getInstance("SHA1PRNG");
SecureRandom secureRandom2 = SecureRandom.getInstance("SHA1PRNG", "SUN");
SecureRandom secureRandom = new SecureRandom();
SecureRandom secureRandom3 = SecureRandom.getInstance("SHA1PRNG");
SecureRandom secureRandom2 = SecureRandom.getInstance("SHA1PRNG", "SUN");
2、SecureRandom的使用
2.1 nextBytes(byte[] bytes)
SecureRandom random = new SecureRandom();
byte[] test = new byte[20];
random.nextBytes(test);
SecureRandom random = new SecureRandom();
byte[] test = new byte[20];
random.nextBytes(test);
2.2 generateSeed(int numBytes)
byte seed[] = random.generateSeed(20);
byte seed[] = random.generateSeed(20);
2.3 示例 彩票随机生成器
private List<List<Integer>> generateCakes(int num, int seedLength, int rowLen) {
SecureRandom random = new SecureRandom();
// シードを生成する
byte[] seeds = SecureRandom.getSeed(seedLength); //获取随机的byte数组,用来后续作为种子
// 項目数を制御するためのカウンター
int counter = 0;
// 実際ループの回数を記録
int realCount = 0;
// 生成する組数を制御するためのカウンター
int tmprows = 0;
// 返すためのList
List<List<Integer>> CakesList = new ArrayList<List<Integer>>();
while (num > tmprows) {
List<Integer> list = new ArrayList<Integer>();
while (counter < rowLen) {
random.setSeed(seeds); //设置种子
int cake = random.nextInt(38); //随机生成0-37的数字
if (!list.contains(cake) && 0 != cake) {
list.add(cake);
counter++;
}
random.nextBytes(seeds); //随机获取新的byte数组用以作为下次的种子,不断循环
realCount++;
}
Collections.sort(list);
pairs++;
tmprows++;
counter = 0;
CakesList.add(list);
if (pairs % Constants.MSG_COUNT == 0) {
System.out.println(pairs + " cakes generated.");
}
}
System.out.println("乱数取得回数:" + realCount);
return CakesList;
}
private List<List<Integer>> generateCakes(int num, int seedLength, int rowLen) {
SecureRandom random = new SecureRandom();
// シードを生成する
byte[] seeds = SecureRandom.getSeed(seedLength); //获取随机的byte数组,用来后续作为种子
// 項目数を制御するためのカウンター
int counter = 0;
// 実際ループの回数を記録
int realCount = 0;
// 生成する組数を制御するためのカウンター
int tmprows = 0;
// 返すためのList
List<List<Integer>> CakesList = new ArrayList<List<Integer>>();
while (num > tmprows) {
List<Integer> list = new ArrayList<Integer>();
while (counter < rowLen) {
random.setSeed(seeds); //设置种子
int cake = random.nextInt(38); //随机生成0-37的数字
if (!list.contains(cake) && 0 != cake) {
list.add(cake);
counter++;
}
random.nextBytes(seeds); //随机获取新的byte数组用以作为下次的种子,不断循环
realCount++;
}
Collections.sort(list);
pairs++;
tmprows++;
counter = 0;
CakesList.add(list);
if (pairs % Constants.MSG_COUNT == 0) {
System.out.println(pairs + " cakes generated.");
}
}
System.out.println("乱数取得回数:" + realCount);
return CakesList;
}
3、其他 关于种子seed获取思路
- 收集计算机的各种信息,如键盘输入时间,CPU时钟,内存使用状态,硬盘空闲空间,IO延时,进程数量,线程数量等信息,来得到一个近似随机的种子
- 这样的话,除了理论上有破解的可能,实际上基本没有被破解的可能。而事实上,现在的高强度的随机数生成器都是这样实现的
4、参考链接
SecureRandom的更多相关文章
- 使用SecureRandom类替代Random类
java.util.Random 产生确定的值可能被恶意的程序预测到. java.security.SecureRandom 产生不确定的随机数不能被预测到. 所以优先使用java.security. ...
- Java中的随机数生成器:Random,ThreadLocalRandom,SecureRandom(转)
文中的 Random即:java.util.Random,ThreadLocalRandom 即:java.util.concurrent.ThreadLocalRandomSecureRandom即 ...
- Java中的随机数生成器:Random,ThreadLocalRandom,SecureRandom
Java中的随机数生成器:Random,ThreadLocalRandom,SecureRandom 文中的 Random即:java.util.Random,ThreadLocalRandom 即: ...
- [转]Java中的随机数生成器:Random,ThreadLocalRandom,SecureRandom
详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp84 Random即:java.util.Random, ThreadL ...
- [解决]Linux Tomcat启动慢--Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [236,325] milliseconds
一.背景 今天部署项目到tomcat,执行./startup.sh命令之后,访问项目迟迟加载不出来,查看日志又没报错(其实是我粗心了,当时tomcat日志还没打印完),一开始怀疑是阿里云主机出现问题, ...
- Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [33,755] milliseconds.
刚部署好程序,第一次登录时,加载非常得慢,查看log日志发现:Creation of SecureRandom instance for session ID generation using [SH ...
- Tomcat 启动时 SecureRandom 非常慢解决办法,亲测有效
1.找到jre—>lib—>security 2.找到 securerandom.source=file:/dev/random 替换成:securerandom.source= ...
- Tomcat启动特慢之SecureRandom问题解决
tomcat启动日志: 08-Jun-2018 09:23:00.445 WARNING [localhost-startStop-1] org.apache.catalina.util.Sessio ...
- Tomcat8 启动慢 Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [53,161] milliseconds
修改$JAVA_PATH/jre/lib/security/java.security文件 将 securerandom.source=file:/dev/random 修改为 securerando ...
- java.security.SecureRandom源码分析 java.security.egd=file:/dev/./urandom
SecureRandom在java各种组件中使用广泛,可以可靠的产生随机数.但在大量产生随机数的场景下,性能会较低. 这时可以使用"-Djava.security.egd=file:/dev ...
随机推荐
- Linux下查看tomcat控制台输出信息
1.进入tomcat/logs文件夹下 2.# tail -f catalina.out -f:实时刷新
- LVS主从部署配置和使用
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一. LVS是L ...
- Ansible--常用模块使用(2)
Ansible常用模块 cron 模块 用途:cron模块⽤于设置定时任务,也⽤于管理定时任务中的环境变量使用方法: [root@ansible ~]# ansible-doc -s cron - n ...
- Fragment问题集
最近做一个APP ,因为在慕课网上学习到了新的方法来做Tab(APP主界面)效果,所以刚学不久久用起来了 用的Fragment实现Tab方法 查询了一下午的安卓资料,关于这个东西是在安卓3.0以后的 ...
- 《Inside C#》笔记(十三) 多线程 上
通过将一个任务划分成多个任务分别在独立的线程执行可以更有效地利用处理器资源并节省时间.但如果不合理地使用多线程,反而会带来种种问题并拖慢运行速度. 一 线程基础 a)线程与多任务 一个线程就是一个处理 ...
- MVC与单元测试实践之健身网站(五)-系统信息、前台入口
Fit项目停滞了一段时间,现在继续吧.上一篇完成了动作文本和配图的添加.编辑等内容.接下来要完成的是后台的最后一个模块:系统信息:以及前台的入口:关于注册.登录.修改密码等. 一 系统信息 a) 用户 ...
- recovery 升级过程执行自定义shell命令
有时候我们需要,在升级的过程中,执行一些shell命令,来完成我们的一些需求,利用升级过程,进行一些特殊化的操作,思路如下: 第一: 把我们需要执行的命令,写成一个test.sh脚本,然后在recov ...
- 利用webpack搭建的前端工程化环境
随着webpack3.x的发布,其功能也越来越强大,很多的项目的编译打包工具也由gulp逐渐转移到webpack.最近因为项目重构考虑使用使用vue,同时想从原来的gulp切换到webpack,所以搭 ...
- [20170703]从备份集取出spfile转化为pfile.txt
[20170703]从备份集取出spfile转化为pfile.txt --//上个星期的事情,要从备份集里面取出看看spfile文件某个参数当时的情况,结果尝试命令老是出错,做一个记录.--//最后选 ...
- [20170628]11g修改用户名.txt
[20170628]11g修改用户名.txt --//昨天看了链接,提到修改用户名:http://www.oratea.com/2017/06/26/oracle-11g%e4%bf%ae%e6%94 ...